프로그래머스 sql

ChoRong0824·2025년 1월 6일
0
post-thumbnail

아픈 동물 찾기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION like 'Sick'
ORDER BY ANIMAL_ID asc;

상위 n개 레코드

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

최솟값 구하기

SELECT DATETIME AS '시간'
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

어린 동물 찾기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID ASC

여러 기준으로 정렬하기

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
-- WHERE NAME IS NOT null
ORDER BY NAME ASC, DATETIME DESC;

WHERE NAME IS NOT NULL은 필요 없는 이유
NAME이 NULL인 데이터는 정렬에서 자동으로 마지막으로 밀려납니다.
추가 필터링이 필요하지 않습니다.

이름에 el이 들어가는 동물 찾기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
-- 이름에 'el'이 들어감
WHERE LOWER(NAME) LIKE LOWER('%EL%')
AND ANIMAL_TYPE="dog"
ORDER BY NAME ASC;

나이 정보가 없는 회원 수 구하기

SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE AGE IS NULL

가장 비싼 상품 구하기

SELECT PRICE AS MAX_PRICE
FROM PRODUCT
LIMIT 1;

이 쿼리의 문제점은 ?

  1. LIMIT 1
    LIMIT 1은 단순히 첫 번째 행만 가져옵니다.
    이 경우, 가장 높은 판매가를 가져온다는 보장이 없습니다.
    데이터베이스는 정렬이 명시되지 않은 경우, 기본적으로 어떤 행이 첫 번째로 반환될지 보장하지 않습니다.

  2. 최댓값 계산이 없음
    MAX() 함수를 사용해야 가장 높은 판매가를 정확하게 구할 수 있습니다.

NULL 처리하기

SELECT ANIMAL_TYPE, NAME, SEX_UPON_INTAKE
FROM  ANIMAL_INS
WHERE NAME IS NULL AS "NO name"

틀린 이유를 아시겠나요?
컬럼명 또는 출력에 AS "NO name" 같은 별칭을 잘못 사용했기 때문에 오류가 발생합니다.

추가 꿀팁

  1. WHERE 절에는 별칭을 사용할 수 없습니다.
    • WHERE 절은 조건을 필터링하는 역할을 합니다.
    • AS "NO name"은 SELECT 절에서 컬럼의 별칭을 정의할 때 사용합니다.
  2. 조건과 별칭 혼용 오류
    • WHERE NAME IS NULL만으로도 조건은 충분합니다.
    • AS "NO name"은 SELECT 절에서 사용해야 합니다.

즉,

IFNULL: NAME이 NULL인 경우 'NO name' 문자열로 대체합니다.
AS NAME: 결과 컬럼의 이름을 NAME으로 유지합니다.

올바른 코드

SELECT ANIMAL_TYPE, 
       IFNULL(NAME, 'No name') AS NAME, 
       SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
  • IFNULL
    IFNULL(A, B)
    A가 NULL이면 B를, 그렇지 않다면 A를 반환

경기도에 위치한 식품창고 목록 출력하기

SELECT WAREHOUSE_ID,
       WAREHOUSE_NAME,
       ADDRESS,
       IFNULL(FREEZER_YN, 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE
-- 경기도에 위치한 창고
WHERE ADDRESS LIKE '경기%'
ORDER BY WAREHOUSE_ID ASC;
profile
백엔드를 지향하며, 컴퓨터공학과를 졸업한 취준생입니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글