집계 함수 사용 전 데이터에 조건을 추가하려면 WHERE
집계 함수를 사용하여 그룹화된 결과에 조건을 추가하려면 HAVING
😊 각 호선 별 몇개의 역이 있는지 집계
select line , count(*)
from subway
group by line
| line | count_of_stations |
|---|
| 1호선 | 212 |
| 2호선 | 123 |
| 3호선 | 91 |
| 4호선 | 62 |
| 5호선 | 53 |
| 6호선 | 39 |
| 7호선 | 51 |
| 8호선 | 17 |
| 9호선 | 38 |
| 경강선 | 11 |
| 경의선 | 55 |
| 경춘선 | 25 |
| 공항철도 | 14 |
| 김포도시철도 | 10 |
| 분당선 | 37 |
| 서해선 | 12 |
| 수인선 | 14 |
| 신분당선 | 13 |
| 용인경전철 | 15 |
| 우이신설경전철 | 13 |
| 의정부경전철 | 15 |
| 인천2호선 | 27 |
| 인천선 | 29 |
| 동해선 | 23 |
😊 지하철 노선에 중복된 이름이 몇개 있는지 파악
(즉 라인은 다르지만 이름은 같은 환승역)
SELECT name , COUNT(*)
from subway
group by name
HAVING count(*)>1;
😊 각 Location에 해당되는 지역구와 동의 개수
SELECT s.name , count(DISTINCT c.name) as city_count,count(DISTINCT t.name) as town_count
FROM State s
INNER JOIN City c ON s.id = c.state_id
INNER JOIN Town t ON c.id = t.city_id
GROUP BY s.name;
| -- | name | city_count | town_count |
|---|
| -- | 강원 | 18 | 315 |
| -- | 경기도 | 42 | 931 |
| -- | 경남 | 22 | 552 |
| -- | 경북 | 23 | 569 |
| -- | 광주 | 5 | 257 |
| -- | 대구 | 9 | 316 |
| -- | 대전 | 5 | 206 |
| -- | 부산 | 16 | 367 |
| -- | 서울 | 25 | 801 |
| -- | 세종 | 1 | 24 |
| -- | 울산 | 5 | 110 |
| -- | 인천 | 10 | 277 |
| -- | 전남 | 22 | 463 |
| -- | 전북 | 15 | 434 |
| -- | 제주 | 2 | 97 |
| -- | 충남 | 16 | 313 |
| -- | 충북 | 14 | 267 |
😊 판매 데이터를 지역(location)과 성별(gender)에 따라 그룹화하여 판매량을 계산
SELECT location, gender, COUNT(*) AS total_sales
FROM sales
GROUP BY location, gender;
| -- | location | gender | total_sales |
|---|
| -- | 서울 | 남성 | 100 |
| -- | 서울 | 여성 | 150 |
| -- | 부산 | 남성 | 120 |
| -- | 부산 | 여성 | 130 |
😊 각 가격중 어떤 카테고리에 방문이 많은지 집계
select s.price,s.category_name ,count(v.id)
from store s left join visit_log v on s.id = v.store_id
group by s.price,s.category_name ;
| -- | price | category_name | count(v.id) |
|---|
| -- | 40,000 | 과자 | 0 |
| -- | 60,000 | 과자 | 0 |
| -- | 60,000 | 빵 | 0 |
| -- | 110,000 | 빵 | 0 |
| -- | 130,000 | 고기 | 0 |
| -- | 70,000 | 고기 | 0 |
| -- | 60,000 | 고기 | 10 |