그룹화 2부
Coddy SQL 여정의 기초 섹션에 포함된 레슨. 72개 중 37번째.
WHERE 키워드는 각 레코드에 대해 조건을 개별적으로 실행합니다. 예를 들면 다음과 같습니다.
SELECT * FROM table1
WHERE col1 > col2col1 > col2는 모든 레코드에서 실행되어 조건이 충족되는지 확인합니다.
하지만 집계 결과를 필터링하려면 어떻게 해야 할까요? 예를 들어:
SELECT category, AVG(price) FROM table1
WHERE AVG(price) > 40
GROUP BY category이 방법은 작동하지 않습니다. WHERE는 집계 결과를 확인할 수 없기 때문입니다. 이를 위해 HAVING 키워드가 있습니다. HAVING은 집계 조건에 따라 데이터를 필터링합니다.
SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40이는 평균 price가 40보다 큰 모든 category를 필터링합니다.
HAVING 절과 WHERE 절을 결합하려면 다음과 같이 작성합니다:
SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40먼저 레코드별로 확인하면서 price가 25보다 큰 모든 레코드를 필터링하고, 그 후에야 GROUP BY 절을 실행하여 평균 price가 40보다 큰 모든 category를 필터링합니다.
챌린지
중급사용 가능한 테이블 및 열:
earthquakes:location,amplitude,period
리히터 규모는 지진의 규모를 측정하는 데 사용되는 로그 척도입니다.
모든 주요 지진에 대해 각 location의 평균 규모를 반환해야 합니다.
주요 지진은 다음과 같이 정의됩니다:
- amplitude가 1보다 크거나 같습니다
- 파동의 period가 1분보다 크거나 같습니다
이 과제에서는 다음과 같은 다른 공식을 사용합니다: M = (A/T)<sup>2</sup> / T. 이는 M = ((A/T)*(A/T)) / T와 같습니다.
각 location과 해당 location의 평균 규모를 반환하되, 주요 지진만 포함하세요(열 이름은 avg_magnitude로 지정). 결과에는 avg_magnitude가 1보다 큰 location만 포함하세요.
결과를 소수점 둘째 자리까지 반올림하세요.
직접 해보기
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: SQL 플레이그라운드