SQL: Як отримати підрахунок кожного окремого значення у стовпці?


176

У мене є таблиця SQL під назвою "пости", яка виглядає приблизно так:

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: джерело?
Moberg

5
"Тобто стандарт ANSI визнає це кровотечею очевидним, що ви маєте на увазі. COUNT (1) був оптимізований постачальниками RDBMS через це забобони. В іншому випадку він буде оцінюватися відповідно до підрахунку ANSI" Count (*) vs Count (1)
Мішель Айрес

@Moberg Це я дізнався (старі люди вчать забобони ...). Ось невелика частина чату для обговорення цього питання
Мішель Айрес

1
Він працює "там", коли ви використовуєте імена стовпців і таблиць, які існують у прикладі.
Ден Гроссман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.