两个针对AVG的Php sql查询得到相同的结果。为什么?
就像我在上面说的,我有两个问题两个针对AVG的Php sql查询得到相同的结果。为什么?,php,mysql,sql,Php,Mysql,Sql,就像我在上面说的,我有两个问题 $avg = "SELECT avg(CASE WHEN Lasttrade = 0 THEN NULL ELSE Lasttrade END) FROM $month ORDER BY ID DESC LIMIT 0, 25"; $avg = "SELECT avg(CASE WHEN Lasttrade = 0 THEN NULL ELSE Lasttrade END) FROM $month ORDER BY ID D
$avg = "SELECT avg(CASE WHEN Lasttrade = 0 THEN NULL ELSE Lasttrade END) FROM $month
ORDER BY ID DESC LIMIT 0, 25";
$avg = "SELECT avg(CASE WHEN Lasttrade = 0 THEN NULL ELSE Lasttrade END) FROM $month
ORDER BY ID DESC LIMIT 0, 5";
我在不同的时间运行它们,使用
$result = $db->query($avg) or die ("avg t1 ");
但他们得出了同样的结果。我想计算最后5次和最后25次的平均值。但我得到了相同的确切数字。有什么想法吗?限制只限制查询返回给您的行数。它不限制查询/计算中使用的行。您需要使用WHERE子句或子查询,具体取决于您需要什么。John指出了“为什么”,LIMIT作用于结果集,而不是查询过程,但以下是您需要如何做到这一点,通过子查询限制平均记录:
SELECT avg(CASE WHEN Lasttrade = 0 THEN NULL ELSE Lasttrade END)
FROM (SELECT * FROM $month
ORDER BY ID DESC
LIMIT 0, 25") AS sub;
查询返回一行,因为它是聚合查询。限制是查询处理中的最后一个逻辑步骤——在聚合和ORDERBY子句之后 尝试使用子查询限制行数:
SELECT avg(CASE WHEN Lasttrade <> 0 THEN Lasttrade END)
FROM (select m.*
from $month m
ORDER BY ID DESC LIMIT 0, 25
) m
您的数据库中有多少条记录?您的限制是您的总结果集只有一行,因为如果您省略了任何GROUP BY,您将对整个表进行合计。您可能需要一个有限制的子查询,以及一个总共有AVG.120-140个表的外部查询。每行50-60行,总共5列左右。我想要最后5行,最后10行。如何做到这一点,请参阅上面的@Wrikken评论