Mysql возвращает только одну строку при использовании Count

Ну, я просто попал в странное поведение, которое я никогда не видел раньше или не заметил.

Я использую этот запрос:

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

...Читать 3 элемента, но при этом я хочу получить общие строки.

есть...

...когда я использую count, запрос возвращает только одну строку, но если я удалю COUNT(*) AS pages -- Я получаю 3 строки, как я должен. Очевидно, я что-то упускаю.

3 ответов


да, 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 диалект.


использование агрегатной функции без группа BY всегда будет возвращать одну строку, независимо от того, что. Вы должны использовать GROUP BY, если хотите вернуть более одной строки.

обратите внимание, что в большинстве СУБД такой запрос не удался бы, потому что это не имеет смысла.


это неэффективно, но будет работать:

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