SELECT
★오프라인/온라인 판매 데이터 통합하기 (Lv4)
문제 설명
문제
풀이
SELECT로 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 조회
FROM에서 온라인 데이터와 오프라인 데이터를 각각 UNION ALL을 통해서 병합
* 오프라인 데이터의 USER_ID는 NULL 처리
* 22년 3월의 데이터로 한정
ORDER BY에서 SALES_DATE, PRODUCT_ID, USER_ID 순으로 오름차순 정렬
※ 모든 서브쿼리에는 별칭이 필수이다!!
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE,
PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM (
-- 온라인 데이터
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
UNION ALL
-- 오프라인 데이터
SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
) AS CombinedSales
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
※ UNION vs. UNION ALL
UNION은 중복 제거, UNION ALL은 중복 허용!
어린 동물 찾기(Lv1)
문제 설명
문제
풀이
SELECT로 ANIMAL_ID, NAME을 조회
WHERE에서 젊은 동물이란 INTKAE_CONDITION이 'Aged'가 아닌 것을 뜻함
ORDER BY에서 ANIMAL_ID를 오름차순 정렬
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;
동물의 아이디와 이름(Lv1)
문제 설명
문제
풀이
SELECT로 ANIMAL_ID, NAME을 조회
ORDER BY에서 ANIMAL_ID를 오름차순 정렬
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
조건에 맞는 개발자 찾기(Lv2)
문제 설명
문제
풀이
SELECT로 ID, EMAIL, FIRST_NAME, LAST_NAME을 조회
WHERE에서 비트연산자 &을 이용하여 SKILL_CODE가 skillcodes테이블에 있는 Python, C#의 code의 합들과 대응하는 것들로 제한
ORDER BY에서 ID를 오름차순 정렬
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS D
WHERE SKILL_CODE & (SELECT SUM(CODE)
FROM SKILLCODES
WHERE NAME IN ('Python','C#'))
ORDER BY ID;
노선별 평균 역 사이 거리 조회하기(Lv2)
문제 설명
문제
풀이
SELECT에서 노선, 총 누계거리, 평균 역 사이 거리를 조회
GROUP BY에서 ROUTE로 그룹화
ORDER BY에서 처음 TOTAL_DISTANCE를 기준으로 정렬을 하면 오답이 나옴 → CONCAT으로 km가 추가된 문자열이기 때문에 정렬이 올바르게 되지 않았음 → 숫자만 기준으로 정렬!!
SELECT ROUTE,
CONCAT(ROUND(SUM(D_BETWEEN_DIST),1),'km') TOTAL_DISTANCE,
CONCAT(ROUND(AVG(D_BETWEEN_DIST),2),'km') AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY ROUND(SUM(D_BETWEEN_DIST),1) DESC;
오랜 기간 보호한 동물(2) (Lv3)
문제 설명
문제
풀이
SELECT에서 동물의 아이디, 이름을 조회
JOIN에서 두 테이블을 연결
ORDER BY에서 out테이블의 datetime과 ins테이블의 datetime의 차이를 내림차순 정렬
LIMIT으로 2개만 출력하게 설정
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O
JOIN ANIMAL_INS I ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY (O.DATETIME - I.DATETIME) DESC
LIMIT 2;
'SQL > 프로그래머스' 카테고리의 다른 글
프로그래머스 | SQL 스터디 16 (1) | 2024.09.18 |
---|---|
프로그래머스 | SQL 스터디 15 (SUBSTIRNG) (2) | 2024.09.17 |
프로그래머스 | SQL 스터디 13 (0) | 2024.09.15 |
프로그래머스 | SQL 스터디 12 (0) | 2024.09.15 |
프로그래머스 | SQL 스터디 11 (비트연산자 &) (1) | 2024.09.11 |