SQL: Как получить количество каждого отдельного значения в столбце?

176

У меня есть таблица SQL под названием "posts", которая выглядит следующим образом:

id | category
-----------------------
1  | 3
2  | 1
3  | 4
4  | 2
5  | 1
6  | 1
7  | 2

Каждый номер категории соответствует категории. Как бы я посчитал, сколько раз каждая категория появляется в сообщении в одном SQL-запросе ?

Например, такой запрос может вернуть символический массив, такой как этот: (1:3, 2:2, 3:1, 4:1)


Мой текущий метод состоит в том, чтобы использовать запросы для каждой возможной категории, такие как:, SELECT COUNT(*) AS num FROM posts WHERE category=#а затем объединить возвращаемые значения в окончательный массив. Однако я ищу решение, которое использует только один запрос.

Джефф Гортмейкер
источник
3
Возможный дубликат MySQL: подсчет вхождений разных значений
Волков Олег Васильевич

Ответы:

311
SELECT
  category,
  COUNT(*) AS `num`
FROM
  posts
GROUP BY
  category
Дэн Гроссман
источник
3
Спасибо! Это было намного проще, чем я думал!
Джефф Гортмейкер
4
@MichelAyres: источник?
Моберг
5
«То есть стандарт ANSI признает это как очевидное истощение того, что вы имеете в виду. COUNT (1) был оптимизирован поставщиками СУБД из-за этого суеверия. В противном случае он будет оцениваться в соответствии с ANSI» Count (*) vs Count (1)
Мишель Айрес
@Moberg Так я и учился (старики учат суевериям ...). Вот небольшая часть чата для обсуждения по этому поводу
Мишель Айрес
1
Он работает "там", когда вы используете имена столбцов и таблиц, которые существуют в примере.
Дэн Гроссман