TIL/SQL

TIL 2024-09-25(SQL)

myoma 2024. 9. 25. 16:17

1. HAVING

  • HAVING : 조건 중에 그룹 함수를 포함하는 조건을 기술
  • 보통 GROUP BY와 같이 사용된다.

 

 

 

2. HAVING 과 WHERE의 차이.

  • Having절은 WHERE절과 비슷하지만 그룹 전체 즉, 그룹을 나타내는 결과 집합의 행에만 적용된다.
  • 반면 WHERE절은 개별 행에 적용이 된다.

 

  • having은 SQL select문이 집계 값이 지정된 조건을 충족하는 행만 반환하도록 지정하는 SQL절이다.
  • where은 단일 테이블에서 데이터를 가져 오거나 여러 테이블과 결합하여 조건을 지정하는데 사용되는 SQL절이다.

 

  • having절은 그룹을 필터링하는 데 사용된다.
  • where절을 행을 필터링 하는데 사용된다.

 

  • Having은 그룹화 또는 집계가 발생한 후 레코드를 필터링하는데 사용된다.
  • Where은 그룹화 또는 집계가 발생하기 전에 레코드를 필터링하는데 사용된다.

 

간단한 예시 Query문을 만들어 이해해보자

SELECT student, AVG(score) avg_score
FROM class
WHERE avg_score >= 60
GROUP BY student

 

위 Query문은 제대로 작동하지 않을 것이다.

 

이유는 작동 순서에 대해 알아야하는데

먼저 원하는 데이터를 테이블에서 가져오기 위해 WHERE절이 사용된다. 그 후에, 가져온 데이터를 대상으로 집계함수 사용이 가능한 것이다.

 

즉, WHERE절이 실행되는 시점에는 아직 집계할 데이터를 다 모으지 못한 상태이므로 집계함수를 사용할 수 없다.

 

그래서 필요한 것이 HAVING절이다. 대부분 GROUP BY와 같이 사용되며 집계함수의 결과를 조건으로 사용해 원하는 그룹만 보여준다.

 

따라서 위의 Query는 아래와 같이 변경되어야한다.

 

SELECT student, AVG(score) avg_score
FROM class
GROUP BY student
HAVING avg_score >= 60

 

 

HAVING절에 집계함수가 꼭 들어갈 필요는 없지만, 집계함수가 사용되지 않는다면 WHERE절을 사용하는 것이 더욱 효율적이다.

 

 

 


 

 

3. COALESCE

  • 입력된 값 중 첫 번째로 NULL이 아닌 값을 반환하는 함수
SELECT COALESCE(컬럼1, 컬럼2, 컬럼3, ....) 
FROM table

 

컬럼1이 NULL이 아니면 컬럼1을 반환되고 NULL이면 컬럼2를 반환.

컬럼2가 NULL이 아니면 컬럼2를 반환하고 컬럼1과 컬럼2 모두 NULL이면 컬럼3 반환.

 

즉 앞에 컬럼이 NULL이면 뒤에 컬럼을 반환하는 형식.

 

예시 Query문들을 보여주면,

 

  • COALESCE(컬럼1, 컬럼1 값이 NULL일 때 반환값)
SELECT COALESCE(컬럼1, '공백')
FROM table

result : 컬럼1에 있는 NULL 값 대신 '공백'으로 출력

 

 

  • COALESCE(컬럼1, ,컬럼2, 컬럼1, 2 값이 NULL일 때 반환값)
SELECT COALESCE(컬럼1, 컬럼2, '공백')
FROM table

result : 컬럼1의 NULL 값 대신 컬럼2가 반환되고 컬럼2의 NULL값 대신 '공백'으로 반환

'TIL > SQL' 카테고리의 다른 글

TIL 2024-09-02 (SQL - 5주차)  (1) 2024.09.02
TIL 2024-08-30 (SQL - 4주차)  (1) 2024.08.30
TIL 2024-08-29 (SQL - 3주차)  (0) 2024.08.29
TIL 2024-08-28 (SQL - 2주차)  (1) 2024.08.28
TIL 2024-08-26 (SQL - 1주차)  (0) 2024.08.27