현업에서는 테이블 전체를 더하는 경우는 없고 특정 카테고리별로 더한다.
전체 데이터를 그루핑하는 방법을 배워보자.
예를 들어, 공급자별 평균가격을 구해보자.
SELECT SupplierID, AVG(Price)
FROM Products
GROUP BY SupplierID //그룹핑하는 기준 컬럼
여기서 카테고리별로도 보고싶다면
SELECT SupplierID, Categoryid, AVG(Price)
FROM Products
GROUP BY SupplierID, Categoryid //그룹핑하는 기준 컬럼
따라서 여러가지 기준으로 그루핑하고싶다면 ,(콤마)찍고 이어주면됨.
MySQL에서는 GROUP BY 1, 2로도 쓸수 있다. SELECT에 있는 첫번째, 2번째 칼럼기준으로 그룹바이해라는 뜻
하지만 명확하게 컬럼명을 쓰는게 좋다.
평균가격이 높은 순서로 싶을 때
여기서(GROUP BY 결과물내에서)평균가격이 100불 이상인 경우를 조회하고싶다면
SELECT SupplierID
, CategoryID
, AVG(Price) AS avg_price
FROM Products
GROUP BY SupplierId, CategoryId
HAVING AVG(Price) >= 100
주의 from뒤에 where절에서 조건걸어주면 100불 이상인 경우에서 group by해주기 때문에 결과가 다름
문제풀이
해커랭크 Weather Observation Station 4
DISTINCT : 중복된 행 제거
top earners
1. salary * month = earnings
2. 각 earning별로 몇 명이 그만큼 벌었는지 계산(5000, 2 / 3000, 5 / 1000, 1) 5000만원번 사람 2명, 3000만원번사람 5명, 1000만원 번 사람 1명 - GROUP BY
3. earings중에 가장 가잔 큰 값을 가져온다 - ORDER BY, LIMIT (내림차순으로 sorting한 다음 limit)
earnings별 몇 명이 벌었는지 계산
SELECT salary * months AS earnings,
COUNT(*)
FRAM employee
GROUP BY earnings
earings중에 가장 가장 큰 값을 가져온다
SELECT salary * months AS earnings,
COUNT(*)
FROM employee
GROUP BY earnings
ORDER BY earnings DESC
LIMIT 1