1. SELECT
- [3월에 태어난 여성 회원 목록 출력하기] _ LEVEL 2
[ 정답 쿼리 ]
SELECT MEMBER_ID
, MEMBER_NAME
, GENDER
, DATE_FORMAT(DATE_OF_BIRTH,"%Y-%m-%d") AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE (GENDER = "W") AND (MONTH(DATE_OF_BIRTH) = 3) -- 출력 조건
AND (TLNO IS NOT NULL) -- 제외조건
ORDER BY MEMBER_ID;
[ 풀이 ]
- 모든 조건이 AND로 연결되어 있고, 출력 조건과 제외 조건의 줄을 나누어 유지보수가 편하게 조정
- 세부 조건에 생년월일(
DATE_OF_BIRTH
)에 대한 형식 조건이 있었기 때문에,DATE_FORMAT()
함수를 이용해 형식 지정
2. SUM, MAX, MIN - [가장 비싼 상품 구하기] _ LEVEL 1
[ 정답 쿼리 ]
SELECT MAX(PRICE) AS MAX_PRICE
FROM PRODUCT;
[ 풀이 ]
GROUP BY
절 없이 집계 함수(MAX
,MIN
,SUM
,AVG
등)를 사용하면, 해당 집계 함수는 전체 테이블에 대해서 적용
3. GROUP BY - [조건에 맞는 사용자와 총 거래금액 조회하기] _ LEVEL 3
[ 정답 쿼리 ]
SELECT U.USER_ID -- 회원 ID
, MIN(NICKNAME) NICKNAME -- 닉네임
, SUM(PRICE) AS TOTAL_SALES -- 총거래금액
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID -- 유저테이블과 조인
WHERE STATUS = 'DONE' -- 조건이 각각의 ROW에 걸려야 하므로 WHERE절에 명시
GROUP BY U.USER_ID
HAVING SUM(PRICE) >= 700000 -- 조건이 GROUP BY의 집계에 걸려야 하므로, WHERE절이 아닌 HAVING절에 조건 명시
ORDER BY TOTAL_SALES;
[ 풀이 ]
- 조건을 크게 2가지로 나눌 수 있을 것 같음
- 완료된 중고 거래 → 테이블의 ROW에 적용되는 조건 : WHERE 절
- 중고 거래의 총금액이 70만 원 이상인 사람 → GROUP BY의 집계로 걸리는 조건 : HAVING 절
GROUP BY
절을 사용할 때,SELECT
절에는GROUP BY
에 명시된 열이나 집계 함수를 사용한 결과만 포함할 수 있음. 따라서 NICKNAME에도 집계함수를 걸어서 표현.
4. IS NULL - [경기도에 위치한 식품창고 목록 출력하기] _ LEVEL 1
[ 정답 쿼리 ]
-- 방법1 IF 사용
SELECT WAREHOUSE_ID
, WAREHOUSE_NAME
, ADDRESS
, IF(FREEZER_YN IS NULL, 'N',FREEZER_YN) FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE "경기도%"
ORDER BY WAREHOUSE_ID ASC;
-- 방법2 COALESCE 사용
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, COALESCE(FREEZER_YN, 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID ASC;
-- 방법3 IFNULL 사용
SELECT WAREHOUSE_ID
, WAREHOUSE_NAME
, ADDRESS
, IFNULL(FREEZER_YN, 'N') FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE "경기도%"
ORDER BY WAREHOUSE_ID ASC;
[ 풀이 ]
COALESCE
사용방법- 입력된 값 중 첫 번째로 NULL이 아닌 값을 반환하는 함수
- 두 개 이상의 인수를 받을 수 있음!
COALESCE(expr1, expr2, ...)
- expr1이 NULL이 아니면 expr1 반환. expr1이 NULL이면 expr2 반환..만약 모든 인수가 NULL이면 NULL 반환
'SQL' 카테고리의 다른 글
[프로그래머스] 3주차 MySQL 스터디 2 (0) | 2024.04.07 |
---|---|
[프로그래머스] 3주차 MySQL 스터디 1 (0) | 2024.04.07 |
[프로그래머스] 2주차 MySQL 스터디 2 (0) | 2024.04.05 |
[프로그래머스] 2주차 MySQL 스터디 1 (0) | 2024.04.04 |
[프로그래머스] 1주차 MySQL 스터디 2 (0) | 2024.04.01 |