我有一个需要提取的相关性数据的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;我希望结果是这样的:
相关性
.83
.82
.74
.64
..。
但是现在查询只输出一行( x.id和最后一个y.id之间的相关性)
发布于 2009-05-26 20:48:33
很难回答这个问题,因为从您的描述中并不清楚您需要查询做什么。
但是我猜你也许能够使用GROUP BY来实现你想要的东西。很抱歉我不能展示一个例子,因为我不能告诉你你想要的结果是什么。
发布于 2009-05-26 20:41:18
如果您使用的是MySQL 5.0及更高版本,则可能需要考虑使用存储过程来处理其中的一些内容。
另外,您是否考虑过子查询?http://dev.mysql.com/doc/refman/5.1/en/subqueries.html
https://stackoverflow.com/questions/912627
复制相似问题