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=#а затем объединить возвращаемые значения в окончательный массив. Однако я ищу решение, которое использует только один запрос.


Ответы:


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
Он работает "там", когда вы используете имена столбцов и таблиц, которые существуют в примере.
Дэн Гроссман
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.