SQL : 열에서 각 고유 값의 개수를 얻는 방법은 무엇입니까?


176

다음과 같은 "posts"라는 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=#다음과 같은 가능한 각 범주에 대해 쿼리를 사용 하고 반환 값을 최종 배열로 결합하는 것입니다. 그러나 하나의 쿼리 만 사용하는 솔루션을 찾고 있습니다.


3
가능한 MySQL
Oleg V. Volkov

답변:


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

3
감사! 생각보다 훨씬 간단했습니다!
Jeff Gortmaker

4
@MichelAyres : 출처?
Moberg December

5
"즉, ANSI 표준은 그것이 의미하는 바를 분명히 피하는 것으로 인식합니다. COUNT (1)은이 미신 때문에 RDBMS 공급 업체에 의해 최적화되었습니다. 그렇지 않으면 ANSI에 따라 평가됩니다" Count (*) vs Count (1)
Michel Ayres

@Moberg 내가 배운 방식이었습니다 (노인들이 미신을 가르치는 중 ...). 여기의 작은 부분 채팅 그것에 대해 토론이
미셸 아이레스

1
예제에 존재하는 열과 테이블 이름을 사용할 때 "있다"고 작동합니다.
Dan Grossman 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.