JeongJin's Blog

일찍 알았어야 했지만 어떻게든 몰랐던 5가지 SQL 본문

SQL

일찍 알았어야 했지만 어떻게든 몰랐던 5가지 SQL

정진킴 2024. 4. 3. 09:20

1) WHERE vs HAVING

  • 저자는 group by 사용하여 집계 조건을 사용 할 때 where를 사용할 수 없으므로 대신 having 을 사용하라고 권장.
SELECT gender, count(*)
FROM dogs
GROUP BY gender
HAVING count(*) >= 4;
  • count(*) >= 4 이상 의 조건으로 WHERE 사용 불가하다.

2) Mapping values with CASE WHEN

  • 아래와 같은 조건이 있다고 하자
    • 나이가 3 이하는 young 으로 출력
    • 나이가 4 이상 5이하는 medium으로 출력
    • 나이가 6 이상은 older로 출력
SELECT
    CASE
    	WHEN age <= 3 THEN 'young'
        WHEN age >= 4 AND age <= 5 THEN 'medium' -- (X)
        ELSE 'older'
    END
FROM dogs;

SELECT
    CASE
    	WHEN age <= 3 THEN 'young'
        WHEN age <= 5 THEN 'medium' -- (O)
        ELSE 'older'
    END
FROM dogs;
  • 4-5 인 경우 앞에 <= 3  조건이 있으므로 <= 5 만 해줘도 가능하다.

3) Combining strings with STRING_AGG

  • group by 사용 시 문자열 join 시 사용한다.
SELECT gender, STRING_AGG(name, ',')
FROM dogs
GROUP BY gender;

-- result
gender | string_agg
-------------------
m      | A,B,C,D
f      | E,F,G
-------------------

4) Joining stuff using CONCAT

  • group by 가 아닌 일반적으로 문자열을 join 하는 경우 CONCAT을 사용한다.

5) smallint vs int vs bigint

  • Integer에는 3가지 타입이 존재
    • SMALLINT ranging from -32768 to +32767
    • INTEGER ranging from -2147483648 to +2147483647
    • BIGINT ranging from -9223372036854775808 to +9223372036854775807
  • 상황에 맞게 적절한 INTEGER 타입으로 선언하여 사용한다.

 

참고 ) 5 SQL Things I Should Have Known Earlier But Somehow Didn’t | by Liu Zuo Lin | Mar, 2024 | Level Up Coding (gitconnected.com)