2009-05-26 79 views
1

我有我需要提取的相关数据的MySQL表。我正在运行此查询来查找给定id的x和y之间的关联;然而,我需要对y.id = 2,3,4,5 ...运行x.id = 1。目前,我只是多次为每个配对运行以下命令。有没有办法加快查询速度,这样我就可以像第二个方程一样运行查询了?显示计算中的所有行?

SELECT @correlation := (COUNT(x.value)*SUM(x.value*y.value) - 
    sum(x.value)*sum(y.value))/SQRT((COUNT(x.value)*SUM(x.value*x.value) - 
    sum(x.value)*sum(x.value))*(COUNT(y.value)*SUM(y.value*y.value) - 
    sum(y.value)*sum(y.value))) AS correlation 
FROM tbl_expressions x, tbl_expressions y 
WHERE x.id=1 AND y.id=2 AND x.expressionnumber=y.expressionnumber; 

SELECT @correlation := (COUNT(x.value)*SUM(x.value*y.value) - 
    sum(x.value)*sum(y.value))/SQRT((COUNT(x.value)*SUM(x.value*x.value) - 
    sum(x.value)*sum(x.value))*(COUNT(y.value)*SUM(y.value*y.value) - 
    sum(y.value)*sum(y.value))) AS correlation 
FROM tbl_expressions x, tbl_expressions y 
WHERE x.id=1 AND y.id IN (2, 3, 4, 5, 6, 7) AND x.expressionnumber=y.expressionnumber; 

我想要的结果是这样的:
相关
0.83
0.82
0.74
0.64
...

但现在的查询只输出一行(x.id和最后一个y.id之间的相关性)

回答

0

很难回答这个问题,因为从描述中不清楚您需要查询的内容。

但我猜你可能可以使用GROUP BY来实现你想要的。我很抱歉,我无法展示一个例子,因为我无法告诉你打算结果如何。

+0

感谢这个工作,当我追加GROUP BY y.id – 2009-05-26 20:53:33

0

如果您使用的是MySQL 5.0及更高版本,则可能需要考虑存储过程来处理某些内容....

另外,您是否考虑过子查询? http://dev.mysql.com/doc/refman/5.1/en/subqueries.html

+1

或者获取数据并在代码中进行计算...... – rball 2009-05-26 20:42:22

+0

我查看了存储过程,特别是mysqludf中的stat-pmcc-samp,但它不适用于我的表。 – 2009-05-26 20:43:01

+0

我试着获取数据并在代码中进行计算,实际上它比执行查询要慢。 – 2009-05-26 20:44:43