오늘 푼 문제
- [Lv.4 / 프로그래머스 / SQL] 서울에 위치한 식당 목록 출력하기
- [Lv.4 / 프로그래머스 / SQL] 대장균들의 자식의 수 구하기
-- 코드를 입력하세요
SELECT
I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS,
ROUND(AVG(R.REVIEW_SCORE),2) AS AVG_SCORE
FROM
REST_INFO AS I
JOIN
REST_REVIEW AS R
ON
I.REST_ID = R.REST_ID
WHERE
I.ADDRESS LIKE '서울특%'
GROUP BY
I.REST_ID
ORDER BY
AVG_SCORE DESC, FAVORITES DESC
-- 코드를 작성해주세요
SELECT
A.ID,
COALESCE(B.COUNT, 0) AS CHILD_COUNT
FROM ECOLI_DATA AS A
LEFT JOIN (
SELECT PARENT_ID, COUNT(*) AS COUNT
FROM ECOLI_DATA
GROUP BY 1
HAVING 1 IS NOT NULL
) AS B
ON A.ID = B.PARENT_ID
ORDER BY
ID;
1. 코딩 테스트를 위한 SQL 문법
적는 순서
SELECT - DISTINCT -FROM - JOIN - ON - WHERE - GROUP BY - HAVING - ORDER BY - LIMIT - OFFSET
- SELECT: 조회할 열(column)을 지정합니다.
- DISTINCT: 중복된 결과를 제거합니다 (선택적).
- FROM: 데이터를 가져올 테이블을 지정합니다.
- JOIN: 다른 테이블과의 조인을 정의합니다.
- ON: 조인의 조건을 정의합니다.
- WHERE: 특정 조건에 맞는 레코드를 필터링합니다.
- GROUP BY: 결과를 특정 열로 그룹화합니다.
- HAVING: GROUP BY로 그룹화된 결과에 추가적인 필터링을 적용합니다.
- ORDER BY: 결과를 특정 열을 기준으로 정렬합니다.
- LIMIT: 반환할 레코드의 수를 제한합니다.
- OFFSET: 반환할 레코드의 시작점을 지정합니다. (페이지네이션)
2. GROUP BY
GROUP BY + 여러 개의 열
SELECT
EXTRACT(year FROM date) AS year,
EXTRACT(month FROM date) AS year,
ROUND(AVG(price), 2) AS avg_price
FROM visit
GROUP BY
EXTRACT(year FROM date),
EXTRACT(month FROM date);
- GROUP BY 뒤에 열 이름을 직접 다 적는 대신 열의 위치로 대신하여 적을 수 있습니다.
SELECT
EXTRACT(year FROM date) AS year,
EXTRACT(month FROM date) AS month,
ROUND(AVG(price), 2) AS avg_price
FROM visit
GROUP BY 1, 2;
GROUP BY, HAVING 그리고 WHERE 까지 같이 사용
SELECT
date,
ROUND(AVG(duration), 2) AS avg_duration
FROM visit
WHERE duration > 5
GROUP BY date
HAVING COUNT(*) > 3
ORDER BY date;
3. 기타 꿀팁들
Column에서 NULL이 나타나면 어떻게 처리할 것인가?
1. WHERE 절에서 NULL 제외
NULL 값을 제외하려면 WHERE 절에 조건을 추가합니다.WHERE TLNO IS NOT NUL
2. NULL을 특정 값으로 대체 (COALESCE)
COALESCE 함수를 사용하여 NULL 값을 특정 값으로 대체할 수 있습니다.SELECT COALESCE(TLNO, 'N/A') AS TLNO, MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH
3. CASE 문으로 처리
CASE 문을 사용하여 NULL값을 특별히 처리할 수 있습니다.SELECT CASE WHEN TLNO IS NULL THEN 'N/A' ELSE TLNO END AS TLNO, MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH FROM MEMBER_PROFILE
데이터의 갯수를 세야한다면 COUNT로(단, SELECT에서만 사용 가능)
SELECT COUNT(USER_ID) AS USERS
문자열 데이터 중 특정 값을 찾아야 한다면 %로
WHERE ADDRESS LIKE '경기도%'
MAX, MIN은 SELECT에서만 사용할 수 있다. 그래서 이런 코드가 나온다.
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
Thanks to 나의 블로그 선생님들
SQL 코딩테스트 대비 문법 정리
SQL에 대해 공부
velog.io
https://blog.naver.com/kjk_lokr/221799799535
'Data Enginnering > Database' 카테고리의 다른 글
[NoSQL] K-V / Document / Column / Graph Databases (0) | 2024.11.19 |
---|---|
[SQL] Nested Query, Join, Aggregate, Group, Order (1) | 2024.11.15 |
[SQL] Data Retrieval in SQL / JOIN vs WHERE / Table as Sets (1) | 2024.11.08 |
[SQL] Integrity Constraint, DDL vs DML (0) | 2024.11.07 |
[Data] DuckDB, Data Warehouse 종류, Data 관리를 위한 필수요소 (1) | 2024.11.06 |