Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个针对AVG的Php sql查询得到相同的结果。为什么?_Php_Mysql_Sql - Fatal编程技术网

两个针对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评论