Выбор COUNT (id) и total в одном SQL-запросе

#mysql

#mysql

Вопрос:

У меня есть загрузка элементов в таблице. У каждого есть user_id.

Я хотел бы узнать количество элементов на пользователя, а также общее количество элементов.

Если я сделаю это:

 SELECT COUNT(id)
FROM items
GROUP BY user_id
  

… Я получаю количество элементов на пользователя, но я не могу получить общее количество элементов, поскольку они сгруппированы.

Возможно ли это сделать?

Если да, то это хороший способ сделать что-то?

Было бы лучше суммировать подсчеты после их выбора?

Ответ №1:

Следующий запрос выдаст вам дополнительную строку с общим количеством элементов s и user_id=NULL.

 SELECT user_id, COUNT(id) n_items
FROM items
GROUP BY user_id WITH ROLLUP
  

Смотрите также документы Mysql о ГРУППИРОВАНИИ ПО модификаторам.

Комментарии:

1. Мне также потребовался один день поиска в Google и чтения в то время, чтобы выяснить… Я не знал stackoveflow 🙂

Ответ №2:

Что-то вроде этого …?

 SELECT COUNT(*)
FROM items
UNION
SELECT COUNT(id)
FROM items
GROUP BY user_id
  

Тогда первым результатом будет total, а последующие результаты будут сгруппированными итогами.

Но лично я бы просто добавил их после выполнения group by запроса, как вы сказали.