使用Count时,Mysql只返回一行

使用Count时,Mysql只返回一行,mysql,count,limit,Mysql,Count,Limit,嗯,我刚刚碰到了一个奇怪的行为,我以前从未见过,或者没有注意到 我正在使用此查询: SELECT *, COUNT(*) AS pages FROM notis WHERE cid = 20 ORDER BY nid DESC LIMIT 0, 3 …读取3个项目,但在执行此操作时,我希望获得总行数 问题是。。。 …当我使用count时,查询只返回一行,但如果我删除 按页数计算*我得到了我想得到的3行。显然,我在这里遗漏了一些东西。使用不带G

嗯,我刚刚碰到了一个奇怪的行为,我以前从未见过,或者没有注意到

我正在使用此查询:

  SELECT *, 
         COUNT(*) AS pages 
    FROM notis 
   WHERE cid = 20 
ORDER BY nid DESC 
   LIMIT 0, 3
…读取3个项目,但在执行此操作时,我希望获得总行数

问题是。。。 …当我使用count时,查询只返回一行,但如果我删除
按页数计算*我得到了我想得到的3行。显然,我在这里遗漏了一些东西。

使用不带GROUP BY的聚合函数将始终返回一行,无论发生什么情况。如果要返回多行,必须使用GROUP BY


请注意,在大多数RDBMS上,这样的查询可能会失败,因为它毫无意义。

是的,count是一个聚合运算符,它只返回一行,没有GROUPBY子句

可能会提出两个不同的问题?让行返回数据和总行数是没有意义的,因为这些数据不属于一起

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

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方言。

这是低效的,但可以:

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

不幸的是,MySQL不支持窗口函数。您将不得不执行两个单独的查询。即使这样,数据也不属于一起。他实际上要求的是类似于第20部门的前三个人,告诉我他们的名字和姓氏,以及第20部门的总人数。是的,你可以问这个问题,但是问这个问题没有意义,因为你会得到20部门的总人数三次。这个问题真的有那么愚蠢吗?我的意思是,在我看来,你问一个部门的总人数,然后得到最先移动的3个人的信息,这似乎是相当合乎逻辑的in@Breezer,然后询问:从notis中选择count*cid=20;从notis中选择*,其中cid=20限制为0,3@Breezer您需要两个不同的数据段。如果我使用group by count函数返回1作为结果,正如Pablo Santa Cruz所说,你需要使用一个窗口函数,但MySQL不支持。你必须做两个查询。是的,这似乎是最后的办法打两个电话,谢谢