SQL: Como obter a contagem de cada valor distinto em uma coluna?


175

Eu tenho uma tabela SQL chamada "posts" que se parece com isso:

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

Cada número de categoria corresponde a uma categoria. Como eu contaria o número de vezes que cada categoria aparece em uma postagem, tudo em uma consulta sql ?

Como exemplo, essa consulta pode retornar uma matriz simbólica como esta: (1:3, 2:2, 3:1, 4:1)


Meu método atual é usar consultas para cada categoria possível, como: SELECT COUNT(*) AS num FROM posts WHERE category=#e combinar os valores de retorno em uma matriz final. No entanto, estou procurando uma solução que use apenas uma consulta.


Respostas:


310
SELECT
  category,
  COUNT(*) AS `num`
FROM
  posts
GROUP BY
  category

3
Obrigado! Era muito mais simples do que eu pensava!
Jeff Gortmaker

4
@MichelAyres: source?
Moberg

5
"Ou seja, o padrão ANSI reconhece como óbvio o que você quer dizer. COUNT (1) foi otimizado pelos fornecedores de RDBMS por causa dessa superstição. Caso contrário, seria avaliado conforme ANSI" Count (*) vs Count (1)
Michel Ayres

@Moberg Foi assim que aprendi (idosos ensinando superstições ...). Aqui está uma pequena parte do bate-papo para uma discussão sobre o assunto
Michel Ayres

1
Ele funciona "lá" quando você usa nomes de colunas e tabelas que existem no exemplo.
Dan Grossman
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.