显示计算中的所有行?

时间:2009-05-26 20:36:24

标签: mysql

我有一个需要提取的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之间的相关性)

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

但我猜你可以使用GROUP BY来达到你想要的效果。对不起,我无法展示一个例子,因为我不知道你想要的结果是什么。