使用Count时,Mysql只返回一行

时间:2010-11-02 22:36:10

标签: mysql count limit

嗯,我刚刚发现了一种我从未见过的奇怪行为,或者没有注意到。

我正在使用此查询:

  SELECT *, 
         COUNT(*) AS pages 
    FROM notis 
   WHERE cid = 20 
ORDER BY nid DESC 
   LIMIT 0, 3

...阅读3个项目,但在这样做的时候,我想得到总行数。

问题是......

...当我使用count时,查询只返回一行,但如果我删除 COUNT(*) AS pages - 正如我想的那样,我得到了3行。显然,我在这里遗漏了一些东西。

3 个答案:

答案 0 :(得分:13)

是的,count是一个聚合运算符,只返回一行(没有group by子句)

也许两个单独的查询?让行返回数据和总行数是没有意义的,因为该数据不属于一起。

如果你真的想要它,你可以这样做:

SELECT *, (select count(*) FROM notis WHERE cid=20) AS count FROM notis WHERE cid=20 ORDER BY nid DESC LIMIT 0,3

或者这个:

SELECT N.*, C.total from notis N join (select count(*) total FROM notis WHERE cid=20) C WHERE cid=20) AS count FROM notis WHERE cid=20 ORDER BY nid DESC LIMIT 0,3

根据您的SQL方言,嵌套表达式有差异。

答案 1 :(得分:9)

使用聚合函数而不使用 GROUP BY将始终返回一行,无论如何。如果要返回多行,则必须使用GROUP BY。

请注意,在大多数RDBMS上,这样的查询都会失败,因为它没有任何意义。

答案 2 :(得分:3)

效率低下,但可行:

SELECT 
   *,
   (SELECT COUNT(*) FROM notis WHERE cid=20) AS pages
FROM notis 
WHERE cid=20 
ORDER BY nid DESC 
LIMIT 0,3