Level 1
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ํ๊ท ์ผ์ผ ๋์ฌ ์๊ธ ๊ตฌํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/151136
๋ฌธ์
CAR_RENTAL_COMPANY_CAR ํ ์ด๋ธ์์ ์๋์ฐจ ์ข ๋ฅ๊ฐ โSUVโ์ธ ์๋์ฐจ๋ค์ ํ๊ท ์ผ์ผ ๋์ฌ ์๊ธ์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ํ๊ท ์ผ์ผ ๋์ฌ ์๊ธ์ ์์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ๊ณ , ์ปฌ๋ผ๋ช ์ AVERAGE_FEE ๋ก ์ง์ ํด์ฃผ์ธ์.
ํ์ด
sql๋ฌธ๋ฒ์์ ํ๊ท ์ ๊ตฌํ๋ ํจ์๋ AVG() ํจ์์ด๊ณ , ๋ฐ์ฌ๋ฆผ ํจ์๋ ROUND() ํจ์
๊ฒฐ๊ณผ๊ฐ์ ์ปฌ๋ผ์ ๋ณ์นญ์ผ๋ก ์ฃผ๋ ํค์๋๋ AS ์ปฌ๋ผ๋ช ์ด๋ค.
1
2
3
SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = "SUV";
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ํ๋ถ์ธ๊ณผ ๋๋ ์ผ๋ฐ์ธ๊ณผ ์์ฌ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/132203
๋ฌธ์
DOCTOR ํ ์ด๋ธ์์ ์ง๋ฃ๊ณผ๊ฐ ํ๋ถ์ธ๊ณผ(CS)์ด๊ฑฐ๋ ์ผ๋ฐ์ธ๊ณผ(GS)์ธ ์์ฌ์ ์ด๋ฆ, ์์ฌID, ์ง๋ฃ๊ณผ, ๊ณ ์ฉ์ผ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๊ณ ์ฉ์ผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ณ , ๊ณ ์ฉ์ผ์๊ฐ ๊ฐ๋ค๋ฉด ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
WHERE, ORDER BY๋ฅผ ํ์ฉํ์ฌ ์ฝ๊ฒ ๊ตฌ์ฑํ์ผ๋ HIRE_YMD์ ๋ ์ง ํฌ๋งท์ด ๋ฌ๋๋ค.
์๊ตฌํ๋ ํฌ๋งท์ โYYYY-MM-DDโ ์์ง๋ง ๋๋ โYYYY-MM-DD h : m : sโ ํฌ๋งท์ผ๋ก ๋์๋ฒ๋ ธ๋ค.
๋ ์ง ํฌ๋งท์ ์ํ๋ ํ์์ผ๋ก ์ง์ ํ๋ ํจ์๋ DATE_FORMAT(์ปฌ๋ผ๋ช , โ๊ตฌ๋ถ๊ธฐํธโ) ์๊ณ ์ด๋ฅผ ํ์ฉํ๋ค.
๊ตฌ๋ถ๊ธฐํธ
๊ตฌ๋ถ๊ธฐํธ | ์ญํ | ๊ตฌ๋ถ๊ธฐํธ | ์ญํ |
---|---|---|---|
%Y | 4์๋ฆฌ ์ฐ๋ | %k | 24์๊ฐ ํ๊ธฐ๋ฒ 0 ~ 23 |
%y | 2์๋ฆฌ ์ฐ๋ | %l | 12์๊ฐ ํ๊ธฐ๋ฒ 1 ~ 12 |
%M | ์๋ฌธ ์(ex. July) | %p | AM/PM ํ์ |
%m | ์ซ์ ์(ex. 07) | %r | hh:mm:ss AM/PM ํ์ |
%D | ์๋ฌธ ์ผ์(ex. 1st) | %S | ์ด 00 ~ 59 |
%d | ์ซ์ ์ผ์(ex. 01) | %s | ์ด 00 ~ 59 |
%a | ์์ผ ๋ช ์ Sun to Sat | %T | 24์๊ฐ ํ๊ธฐ๋ฒ hh:mm:ss |
%b | ์์ Jan to Dec | %U | ์ผ์์ผ์ด ์ฒซ์งธ๋ ์ธ ์ฃผ (00 ~ 53) |
%c | ์์ 0 ~ 12 | %u | ์์์ผ์ด ์ฒซ์งธ๋ ์ธ ์ฃผ (00 ~ 53) |
%e | ์ผ์๋ฅผ 0 ~ 31 | %V | ์ผ์์ผ์ด ์ฒซ์งธ๋ ์ธ ์ฃผ (01 ~ 53) %X์ ํจ๊ป ์ฌ์ฉ |
%f | ๋ง์ดํฌ๋ก์ด 000000 ~ 999999 | %v | ์์์ผ์ด ์ฒซ์งธ๋ ์ธ ์ฃผ (01 ~ 53) %x์ ํจ๊ป ์ฌ์ฉ |
%H | ์๊ฐ์ 00 ~ 23 | %W | ์์ผ์ ํ๋ค์์ผ๋ก |
%h | ์๊ฐ์ 00 ~ 12 | %w | ์ผ์์ผ = 0 ~ ํ ์์ผ = 6 |
%I | ์๊ฐ์ 00 ~ 12 | %X | ์ผ์ฃผ์ผ์ ์์์ ์ผ์์ผ๋ก |
%i | ๋ถ 00 ~ 59 | %x | ์ผ์ฃผ์ผ์ ์์์ ์์์ผ๋ก |
%j | ๋ ์ง(์ฐ ๊ธฐ์ค) 001 ~ 366 | %Y | ๋ ๋ 4์๋ฆฌ ํํ |
ย | ย | %y | ๋ ๋ 2์๋ฆฌ ํํ |
1
2
3
4
5
6
7
SELECT DR_NAME,
DR_ID,
MCDP_CD,
DATE_FORMAT(HIRE_YMD, "%Y-%M-%d")
FROM DOCTOR
WHERE MCDP_CD = "CS" OR MCDP_CD = "GS"
ORDER BY HIRE_YMD DESC, DR_NAME ASC;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์กฐ๊ฑด์ ๋ง๋ ๋์๋ฆฌ์คํธ ์ถ๋ ฅํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/144853?language=mysql
๋ฌธ์
BOOK ํ ์ด๋ธ์์ 2021๋ ์ ์ถํ๋ โ์ธ๋ฌธโ ์นดํ ๊ณ ๋ฆฌ์ ์ํ๋ ๋์ ๋ฆฌ์คํธ๋ฅผ ์ฐพ์์ ๋์ ID(BOOK_ID), ์ถํ์ผ (PUBLISHED_DATE)์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์ถํ์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
DATE_FORMAT์ ์ ์ด์ฉํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
1
2
3
4
5
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, "%Y-%m-%d")
FROM BOOK
WHERE DATE_FORMAT(PUBLISHED_DATE, "%Y") = "2021"
AND CATEGORY = "์ธ๋ฌธ"
ORDER BY PUBLISHED_DATE;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์ธ๊ธฐ์๋ ์์ด์คํฌ๋ฆผ https://school.programmers.co.kr/learn/courses/30/lessons/133024
๋ฌธ์
์๋ฐ๊ธฐ์ ํ๋งค๋ ์์ด์คํฌ๋ฆผ์ ๋ง์ ์ด์ฃผ๋ฌธ๋์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ณ ์ด์ฃผ๋ฌธ๋์ด ๊ฐ๋ค๋ฉด ์ถํ ๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
ํ์ด
์ ๋ง ๊ธฐ๋ณธ์ค์ ๊ธฐ๋ณธ์ธ ๋ฌธ์ ๊ธฐ์ ์ค๋ช ํ ๊ฒ ์๋ค..
1
2
3
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC , SHIPMENT_ID ;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ฐ์๋์ ์์นํ ์์ฐ๊ณต์ฅ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131112
๋ฌธ์
FOOD_FACTORY ํ ์ด๋ธ์์ ๊ฐ์๋์ ์์นํ ์ํ๊ณต์ฅ์ ๊ณต์ฅ ID, ๊ณต์ฅ ์ด๋ฆ, ์ฃผ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๊ณต์ฅ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
๊ฐ์๋ ๋ผ๋ ๋ฌธ์์ด๋ง ์ถ๋ ฅํด์ผํ๋๋ฐ mysql์์ ๋ฌธ์์ด ์ถ์ถ ํจ์๊ฐ SUBSTR(), SUBSTRING() ๋๊ฐ์ง๊ฐ ์์๋ค.
๋๋ SUBSTR()์ ์ฌ์ฉํ๋ค.
SUBSTR(์ปฌ๋ผ๋ช , ์์์ง์ , ๊ธธ์ด)
SUBSTRING(์ปฌ๋ผ๋ช , ์์์ง์ , ๊ธธ์ด)
๊ธธ์ด๋ฅผ ์ ๋ ฅํ์ง ์์ผ๋ฉด ๋๊น์ง ์ถ์ถํ๋ค.
1
2
3
4
5
SELECT FACTORY_ID,
FACTORY_NAME,
ADDRESS
FROM FOOD_FACTORY
WHERE SUBSTR(ADDRESS, 1, 3) = "๊ฐ์๋";
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL 12์ธ ์ดํ์ธ ์ฌ์ ํ์ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/132201
๋ฌธ์
PATIENT ํ ์ด๋ธ์์ 12์ธ ์ดํ์ธ ์ฌ์ํ์์ ํ์์ด๋ฆ, ํ์๋ฒํธ, ์ฑ๋ณ์ฝ๋, ๋์ด, ์ ํ๋ฒํธ๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ ํ๋ฒํธ๊ฐ ์๋ ๊ฒฝ์ฐ, โNONEโ์ผ๋ก ์ถ๋ ฅ์์ผ ์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ๋์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ณ , ๋์ด ๊ฐ๋ค๋ฉด ํ์์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
sql์์ if null์ ํ์ธํ๋ ํจ์๋ IFNULL(์ปฌ๋ผ๋ช , null์ผ๋ ๋ณํํ ๋ฌธ์) ์ด๋ค.
1
2
3
4
5
6
7
SELECT PT_NAME,
PT_NO,
GEND_CD,
AGE, IFNULL(TLNO, "NONE")
FROM PATIENT
WHERE GEND_CD = "W" AND AGE <= 12
ORDER BY AGE DESC, PT_NAME ASC;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณผ์ผ๋ก ๋ง๋ ์์ด์คํฌ๋ฆผ ๊ณ ๋ฅด๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/133025
๋ฌธ์
์๋ฐ๊ธฐ ์์ด์คํฌ๋ฆผ ์ด์ฃผ๋ฌธ๋์ด 3,000๋ณด๋ค ๋์ผ๋ฉด์ ์์ด์คํฌ๋ฆผ์ ์ฃผ ์ฑ๋ถ์ด ๊ณผ์ผ์ธ ์์ด์คํฌ๋ฆผ์ ๋ง์ ์ด์ฃผ๋ฌธ๋์ด ํฐ ์์๋๋ก ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
ํ์ด
๋ ํ ์ด๋ธ์ ๊ฐ์ด ๋น๊ตํด์ผํ๋ค.
๊ทธ๋๋ ๊ต์ฅํ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ์ฌ์ ์ด๋ ค์ด๊ฑด ์์๋ค.
1
2
3
4
5
6
SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF, ICECREAM_INFO
WHERE FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
AND FIRST_HALF.TOTAL_ORDER > 3000
AND ICECREAM_INFO.INGREDIENT_TYPE = 'fruit_based'
ORDER BY TOTAL_ORDER DESC
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ๋ชจ๋ ๋ ์ฝ๋ ์กฐํํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59034
๋ฌธ์
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋ชจ๋ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ANIMAL_ID์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. SQL์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋์ด์ผ ํฉ๋๋ค.
ํ์ด
ํ์ด๊ฐ ํ์ํ ๊น..? ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์กฐํํ ๋๋ *****๋ฅผ ์ฌ์ฉํ๋ค.
1
SELECT * FROM ANIMAL_INS;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์ญ์ ์ ๋ ฌํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59035
๋ฌธ์
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋ชจ๋ ๋๋ฌผ์ ์ด๋ฆ๊ณผ ๋ณดํธ ์์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ANIMAL_ID ์ญ์์ผ๋ก ๋ณด์ฌ์ฃผ์ธ์. SQL์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋์ด์ผ ํฉ๋๋ค.
ํ์ด
์ญ์์ ORDER BY ๋ฅผ ์ฌ์ฉํ์ฌ DESC์ ํจ๊ป ์ ์ด์ฃผ๋ฉด ๋๋ค.
1
2
3
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์ํ ๋๋ฌผ ์ฐพ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59036
๋ฌธ์
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ์ํ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์์ด๋ ์์ผ๋ก ์กฐํํด์ฃผ์ธ์.
ํ์ด
WHERE์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ๋ถ์ผ ์ ์๋ค.
1
2
3
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = "Sick";
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์ด๋ฆฐ ๋๋ฌผ ์ฐพ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59037
๋ฌธ์
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ์ ์ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์์ด๋ ์์ผ๋ก ์กฐํํด์ฃผ์ธ์.
ํ์ด
ใ ใ .. ํ์ด๊ฐ ํ์ํ ๊น?
1
2
3
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != "Aged";
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ https://school.programmers.co.kr/learn/courses/30/lessons/59403
๋ฌธ์
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋ชจ๋ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ์ ANIMAL_ID์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. SQL์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋์ด์ผ ํฉ๋๋ค.
ํ์ด
์๋ต..
1
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์ฌ๋ฌ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59404
๋ฌธ์
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋ชจ๋ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ๋ณดํธ ์์์ผ์ ์ด๋ฆ ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๋จ, ์ด๋ฆ์ด ๊ฐ์ ๋๋ฌผ ์ค์์๋ ๋ณดํธ๋ฅผ ๋์ค์ ์์ํ ๋๋ฌผ์ ๋จผ์ ๋ณด์ฌ์ค์ผ ํฉ๋๋ค.
ํ์ด
ORDER BY ์ฒซ๋ฒ์งธ๊ธฐ์ค, ๋๋ฒ์งธ๊ธฐ์ค ์ผ๋ก ์์ฑํ๋ฉด ๋๋ค.
1
2
3
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์์ n๊ฐ ๋ ์ฝ๋ https://school.programmers.co.kr/learn/courses/30/lessons/59405
๋ฌธ์
๋๋ฌผ ๋ณดํธ์์ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๋๋ฌผ์ ์ด๋ฆ์ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
ํ์ด
Limit ๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ n๊ฐ์ ์ปฌ๋ผ์ ์กฐํํ ์ ์๋ค.
1
2
3
4
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์กฐ๊ฑด์ ๋ง๋ ํ์ ์ ๊ตฌํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131535
๋ฌธ์
USER_INFO ํ ์ด๋ธ์์ 2021๋ ์ ๊ฐ์ ํ ํ์ ์ค ๋์ด๊ฐ 20์ธ ์ด์ 29์ธ ์ดํ์ธ ํ์์ด ๋ช ๋ช ์ธ์ง ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
ํ์ด
COUNT ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์๋ฅผ ์ ์ ์๋ค.
์ด๋ฒ์ SUBSTRING์ ์ฌ์ฉํด๋ณด๊ฒ ๋ค.
1
2
3
4
5
SELECT COUNT(*)
FROM USER_INFO
WHERE SUBSTRING(JOINED, 1, 4)='2021'
AND AGE >= 20
AND AGE <= 29;
Level 2
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL 3์์ ํ์ด๋ ์ฌ์ฑ ํ์ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131120
๋ฌธ์
MEMBER_PROFILE ํ ์ด๋ธ์์ ์์ผ์ด 3์์ธ ์ฌ์ฑ ํ์์ ID, ์ด๋ฆ, ์ฑ๋ณ, ์๋ ์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ ํ๋ฒํธ๊ฐ NULL์ธ ๊ฒฝ์ฐ๋ ์ถ๋ ฅ๋์์์ ์ ์ธ์์ผ ์ฃผ์๊ณ , ๊ฒฐ๊ณผ๋ ํ์ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
DATE_FORMAT ๊ณผ IS NOT NULL / IS NULL ์ ํ์ฉํ์๋ค.
1
2
3
4
5
6
7
8
SELECT MEMBER_ID,
MEMBER_NAME,
GENDER,
DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d")
FROM MEMBER_PROFILE
WHERE DATE_FORMAT(DATE_OF_BIRTH, "%m") = "03"
AND GENDER = "W"
AND TLNO IS NOT NULL;
๐ ํ๋ก๊ทธ๋๋จธ์ค SQL ์ฌ๊ตฌ๋งค๊ฐ ์ผ์ด๋ ์ํ๊ณผ ํ์ ๋ฆฌ์คํธ ๊ตฌํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131536
๋ฌธ์
ONLINE_SALE ํ ์ด๋ธ์์ ๋์ผํ ํ์์ด ๋์ผํ ์ํ์ ์ฌ๊ตฌ๋งคํ ๋ฐ์ดํฐ๋ฅผ ๊ตฌํ์ฌ, ์ฌ๊ตฌ๋งคํ ํ์ ID์ ์ฌ๊ตฌ๋งคํ ์ํ ID๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ํ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ํ์ ID๊ฐ ๊ฐ๋ค๋ฉด ์ํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
GROUP BY๋ฅผ ํ์ฌ ๋์ผํ ํ์์ด ๊ตฌ๋งคํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ณ , COUNT(*)๋ฅผ ์ฌ์ฉํ์ฌ 2 ์ด์์ธ(์ฌ๊ตฌ๋งค) ์ปฌ๋ผ๋ง ๊ฐ์ ธ์จ๋ค.
1
2
3
4
5
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;
Level 4
๐ ์คํ๋ผ์ธ/์จ๋ผ์ธ ํ๋งค ๋ฐ์ดํฐ ํตํฉํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131537
๋ฌธ์
ONLINE_SALE ํ ์ด๋ธ๊ณผ OFFLINE_SALE ํ ์ด๋ธ์์ 2022๋ 3์์ ์คํ๋ผ์ธ/์จ๋ผ์ธ ์ํ ํ๋งค ๋ฐ์ดํฐ์ ํ๋งค ๋ ์ง, ์ํID, ์ ์ ID, ํ๋งค๋์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. OFFLINE_SALE ํ ์ด๋ธ์ ํ๋งค ๋ฐ์ดํฐ์ USER_ID ๊ฐ์ NULL ๋ก ํ์ํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ํ๋งค์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ํ๋งค์ผ์ด ๊ฐ๋ค๋ฉด ์ํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์, ์ํID๊น์ง ๊ฐ๋ค๋ฉด ์ ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
์ญ์ ๋ ๋ฒจ4๋ผ ๊ทธ๋ฐ์ง ํ์คํ ์ด๋ ค์ ๋ค.
์ผ๋จ WITH ๊ฐ์ํ ์ด๋ธ๋ช AS์ ์ ์ฌ์ฉํ์ฌ ONLINE_SALE ํ ์ด๋ธ๊ณผ OFFLINE_SALEํ ์ด๋ธ์ ๋ฌถ์ ๊ฐ์์ ํ ์ด๋ธ์ ๋ง๋ค์ด์ฃผ์๋ค.
ONLINE_SALE๊ณผ OFFLINE_SALEํ ์ด๋ธ์ UNION ALL ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ณต๋๋ ๋ ์ฝ๋๊น์ง ํฉ์ณ์ฃผ์๋ค. ์ฌ๊ธฐ์ ๊ทธ๋ฅ UNION์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ค๋ณต ๋ ์ฝ๋๋ ์ ๊ฑฐ๋๋ ๊ผญ ALL ์ ์ฌ์ฉํ์ฌ์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ BETWEEN์ ์ฌ์ฉํ์ฌ 2022๋ 3์ 1์ผ๋ถํฐ 3์ 31์ผ ์ฌ์ด์ ์๋ ๋ ์ฝ๋๋ง ๋ถ๋ฌ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WITH ALL_SALES AS (
SELECT SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
FROM ONLINE_SALE
UNION ALL
SELECT SALES_DATE,
PRODUCT_ID,
NULL AS USER_ID,
SALES_AMOUNT
FROM OFFLINE_SALE
)
SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
FROM ALL_SALES
WHERE SALES_DATE
BETWEEN "2022-03-01" AND "2022-03-31"
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
๐ ์์ธ์ ์์นํ ์๋น ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131118
๋ฌธ์
REST_INFO์ REST_REVIEW ํ ์ด๋ธ์์ ์์ธ์ ์์นํ ์๋น๋ค์ ์๋น ID, ์๋น ์ด๋ฆ, ์์ ์ข ๋ฅ, ์ฆ๊ฒจ์ฐพ๊ธฐ์, ์ฃผ์, ๋ฆฌ๋ทฐ ํ๊ท ์ ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๋ฆฌ๋ทฐ ํ๊ท ์ ์๋ ์์์ ์ธ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ ํด์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ํ๊ท ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ , ํ๊ท ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์ฆ๊ฒจ์ฐพ๊ธฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
AVG ๋ก ํ๊ท ์ ๊ตฌํ ํ ROUND()๋ฅผ ํตํด ๋ฐ์ฌ๋ฆผ์ ์์ผ์ฃผ์๋ค.
JOIN์ผ๋ก ์ ์ชฝ ํ ์ด๋ธ์ ํด๋น๊ฐ์ด ์กด์ฌํ ๋ GROUP BY๋ก ๋ฌถ์ด์ฃผ์๊ณ WHERE ์กฐ๊ฑด์ ๋ถ์ฌ์ค ํ ORDER BY๋ก ์ ๋ ฌํด์ฃผ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
SELECT R.REST_ID,
I.REST_NAME,
I.FOOD_TYPE,
I.FAVORITES,
I.ADDRESS,
ROUND(AVG(R.REVIEW_SCORE),2) AS SCORE
FROM REST_REVIEW R
JOIN REST_INFO I
ON R.REST_ID = I.REST_ID
GROUP BY R.REST_ID
WHERE I.ADDRESS LIKE '์์ธ%'
ORDER BY SCORE DESC, I.FAVORITES DESC