๐โโ๏ธ SQL - SELECT 33 ๋ฌธํญ
๐โโ๏ธ SQL - SELECT 33 ๋ฌธํญ
SELECT
1. ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ค๊ณ ๊ฑฐ๋ ๋๊ธ ์กฐํํ๊ธฐ(Level 1)
1
2
3
4
5
6
7
8
9
10
SELECT UGB.title AS title,
UGB.board_id AS board_id,
UGR.reply_id AS reply_id,
UGR.writer_id AS writer_id,
UGR.contents AS contents,
DATE_FORMAT(UGR.created_date, '%Y-%m-%d') AS created_date
FROM USED_GOODS_BOARD UGB JOIN USED_GOODS_REPLY UGR
ON UGB.board_id = UGR.board_id
WHERE DATE_FORMAT(UGB.created_date, '%Y-%m') = '2022-10'
ORDER BY UGR.created_date, UGB.title;
- https://school.programmers.co.kr/learn/courses/30/lessons/164673
- ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
DATE_FORMAT()ํจ์ ์ฌ์ฉ๋ฒ- ์ค๋ฌด์์๋
=์กฐ๊ฑด๋ณด๋ค๋ ๋ฒ์ ์กฐ๊ฑด์ผ๋ก ์กฐํํด์ผ ํจUGB.created_date์ ์ธ๋ฑ์ค ์์ ๊ฒฝ์ฐ ๋ฒ์ ์ค์บ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ฒ์ ์กฐ๊ฑด์ผ๋ก ์์ฑํด์ผ ํจ์ฌ ํจ์จ์ ์
2. ๊ณผ์ผ๋ก ๋ง๋ ์์ด์คํฌ๋ฆผ ๊ณ ๋ฅด๊ธฐ(Level 1)
1
2
3
4
5
6
SELECT FH.flavor AS flavor
FROM FIRST_HALF FH JOIN ICECREAM_INFO II
ON FH.flavor = II.flavor
WHERE FH.total_order > 3000
AND II.ingredient_type = 'fruit_based'
ORDER BY FH.total_order DESC;
- https://school.programmers.co.kr/learn/courses/30/lessons/133025
- ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
flavor์ปฌ๋ผ์ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ์กฐ์ธ ์ฑ๋ฅ์ด ์ข์์ง๋ค.- ๋ฌธ์ ์์ ํด๋น ์ด์
FH์ ๊ธฐ๋ณธ ํค์ด๋ฏ๋กII.flavor์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
- ๋ฌธ์ ์์ ํด๋น ์ด์
- ๊ฐ ๋ถํฌ์ ๋ฐ๋ผ
FH.total_order,II.ingredient_type์ธ๋ฑ์ค๋ฅผ ๊ฑธ๋ฉด ํจ์จ์ ์ด๋ค. FH.total_order์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค์ ์ํด ์ ๋ ฌ ๋น์ฉ์ด ๊ฐ์ ์ฌ๋ถ๋ ์คํ ๊ณํ์ ํ์ธํด์ผ ํ๋ค.
3. ํ๋ถ์ธ๊ณผ ๋๋ ์ผ๋ฐ์ธ๊ณผ ์์ฌ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ(Level 1)
1
2
3
4
5
6
7
SELECT dr_name,
dr_id,
mcdp_cd,
DATE_FORMAT(hire_ymd, '%Y-%m-%d') AS hire_ymd
FROM DOCTOR
WHERE mcdp_cd = 'CS' OR mcdp_cd = 'GS'
ORDER BY hire_ymd DESC, dr_name ASC;
- https://school.programmers.co.kr/learn/courses/30/lessons/132203
- ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
OR์ฐ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ์ ๋ชป ํ๋ ๊ฒฝ์ฐ๊ฐ ์์IN ('CS', 'GS')์ ๊ฐ์ด ๊ฐ์ ๊ฐ๋ฅ
- ์ ๋ ฌ ์ฐ์ฐ ๋น์ฉ์ ์ค์ด๊ธฐ ์ํด
(hire_ymd, dr_name)๋ณตํฉ ์ธ๋ฑ์ค ๊ณ ๋ คํ ์ ์์- ๋จ ๋์ฉ๋ ๋ฐ์ดํฐ๊ฑฐ๋, ์ฆ์ ์ฟผ๋ฆฌ ๋ฑ ์ ๋ ฌ ์ต์ ํ๊ฐ ํ์ํ ์ํฉ์ผ ๋๋ง ํด๋น๋จ
4. 12์ธ ์ดํ์ธ ์ฌ์ ํ์ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ(Level 1)
1
2
3
4
5
6
7
8
9
SELECT pt_name,
pt_no,
gend_cd,
age,
IFNULL(tlno, 'NONE') AS tlno
FROM PATIENT
WHERE age <= 12
AND gend_cd = 'W'
ORDER BY age DESC, pt_name ASC;
- https://school.programmers.co.kr/learn/courses/30/lessons/132201
- ๋์ฉ๋ ํ
์ด๋ธ์ด๋ผ๋ฉด
gend_cd, age๊ธฐ์ค์ผ๋ก ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ คํ ์ ์๋ค.
5. ์ธ๊ธฐ์๋ ์์ด์คํฌ๋ฆผ(Level 1)
1
2
3
SELECT flavor
FROM FIRST_HALF
ORDER BY total_order DESC, shipment_id ASC;
- https://school.programmers.co.kr/learn/courses/30/lessons/133024
6. ์กฐ๊ฑด์ ๋ง๋ ๋์ ๋ฆฌ์คํธ ์ถ๋ ฅํ๊ธฐ(Level 1)
1
2
3
4
5
6
SELECT book_id,
DATE_FORMAT(published_date, '%Y-%m-%d') AS published_date
FROM BOOK
WHERE YEAR(published_date) = '2021'
AND category = '์ธ๋ฌธ'
ORDER BY published_date;
- https://school.programmers.co.kr/learn/courses/30/lessons/144853
7. ํ๊ท ์ผ์ผ ๋์ฌ ์๊ธ ๊ตฌํ๊ธฐ(Level 1)
1
2
3
4
SELECT ROUND(AVG(daily_fee), 0) AS average_fee
FROM CAR_RENTAL_COMPANY_CAR
WHERE car_type = 'SUV'
GROUP BY car_type;
- https://school.programmers.co.kr/learn/courses/30/lessons/151136
- ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
round()ํจ์์ ์ฒซ ๋ฒ์งธ ์ธ์์๋ ๋์ ๊ฐ์ด ๋ค์ด๊ฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์์๋ ๋ฐ์ฌ๋ฆผํ ์๋ฆฟ์์ ๋ํ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.GROUP BYํค์๋๋ฅผ ํตํด ํน์ ์ด์ ๊ฐ๋ค์ ์ง๊ณ ์ฒ๋ฆฌํ ์ ์๋ค.
8. 3์์ ํ์ด๋ ์ฌ์ฑ ํ์ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ(Level 2)
1
2
3
4
5
6
7
8
9
SELECT member_id,
member_name,
gender,
DATE_FORMAT(date_of_birth, '%Y-%m-%d') AS date_of_birth
FROM MEMBER_PROFILE
WHERE MONTH(date_of_birth) = '03'
AND gender = 'W'
AND tlno IS NOT NULL
ORDER BY member_id;
- https://school.programmers.co.kr/learn/courses/30/lessons/131120
- ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
MONTH()ํจ์๋ฅผ ์ฐ๋ฉด ์ธ๋ฑ์ค๋ฅผ ํ์ง ๋ชปํ๊ณ , ๋ฒ์ ์กฐ๊ฑด ๋ฐฉ์์ ๊ณ ๋ คํด์ผ ํ๋ค.gender์กฐ๊ฑด๊ณผ ๊ฐ์ด ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ๊ฐ(M,W๋ ๊ฐ๋ฟ)์ด๋ฉด ๋จ๋ ์ธ๋ฑ์ค ํจ์ฉ์ด ๊ฑฐ์ ์๊ณ , ๋ค๋ฅธ ์ปฌ๋ผ๊ณผ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ คํ ์ ์๋ค.IS NOT NULL์กฐ๊ฑด์ ๋ณดํต ์ธ๋ฑ์ค ํจ์จ์ฑ์ด ๋ฎ๋ค.ORDER BY์ ์ ๊ธฐ๋ณธ ํค๊ฐ ๋ค์ด๊ฐ๋ค๋ฉด ์ ๋ ฌ ๋น์ฉ์ด ๊ฑฐ์ ์๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ์ธ๋ฑ์ค ์ค๊ณ๋ฅผ ๊ณ ๋ คํ ์ ์๋ค.
9. ๊ฐ์๋์ ์์นํ ์์ฐ๊ณต์ฅ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ(Level 1)
1
2
3
4
5
6
SELECT factory_id,
factory_name,
address
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '๊ฐ์๋%'
ORDER BY factory_id;
- https://school.programmers.co.kr/learn/courses/30/lessons/131112
- ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
%๊ฐ ๋ค์๋ง ์๋ ๊ฒฝ์ฐ๋ ์ธ๋ฑ์ค ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.- ์ ๋ ฌ์ ๊ณ ๋ คํ์ฌ
(address, factory_id)๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ด์์ ์ด๋ค.
10. ์์ธ์ ์์นํ ์๋น ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ(Level 4)
1
2
3
4
5
6
7
8
9
10
11
SELECT RI.rest_id AS rest_id,
RI.rest_name AS rest_name,
RI.food_type AS food_type,
RI.favorites AS favorites,
RI.address AS address,
ROUND(AVG(RR.review_score), 2) AS score
FROM REST_INFO RI JOIN REST_REVIEW RR
ON RI.rest_id = RR.rest_id
WHERE address LIKE '์์ธ%'
GROUP BY RI.rest_id
ORDER BY score DESC, favorites DESC;
- https://school.programmers.co.kr/learn/courses/30/lessons/131118
- ์๋ฌธ์ด ๋ค์๋ ๋ถ๋ถ์
LEFT JOIN์ ์ฒ๋ฆฌํด์ผ ๋ฆฌ๋ทฐ๊ฐ ์๋ ์๋น ๋ชฉ๋ก๋ ์กฐํํ ์ ์์ํ ๋ฐ ์ ํด๋น ์ฒ๋ฆฌ๋ฅผ ์๊ตฌํ์ง ์๋์ง ๊ถ๊ธํ๊ณ , ๋ฌธ์ ์๋ ์ด ๋ถ๋ถ์ ๋ฐ๋ก ์ธ๊ธํ์ง ์์ ๊ฒ์ด ์์ฌ์ ๋ค. - ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
address์ด์์ ์์ธ์ ์์นํ๋ ๊ฒฝ์ฐ"์์ธํน๋ณ์%"๋๋"์์ธ์%"๊ฐ์ ๊ฐ๊ณ ์์๊ธฐ ๋๋ฌธ์ ํญ์ ๋ฐ์ดํฐ๊ฐ ํ์คํ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํ๋ค.- ๋ง์ฝ ๋ฆฌ๋ทฐ๊ฐ ์๋ ์๋น ๋ํ ์ฒ๋ฆฌํ๋ค๋ฉด, ํ๊ท ๊ณ์ฐ ์
NULL์ผ ๋์ ์ฒ๋ฆฌ๋ ์ถ๊ฐํด์ผ ํ๋ค.
11. ์ฌ๊ตฌ๋งค๊ฐ ์ผ์ด๋ ์ํ๊ณผ ํ์ ๋ฆฌ์คํธ ๊ตฌํ๊ธฐ(Level 2)
1
2
3
4
5
6
SELECT user_id,
product_id
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY user_id ASC, product_id DESC;
- https://school.programmers.co.kr/learn/courses/30/lessons/131536
HAVINGํค์๋๋GROUP BY์ ๋ํ ์กฐ๊ฑด์ ์ ์ฉํ ์ ์๋ค.
12. ๋ชจ๋ ๋ ์ฝ๋ ์กฐํํ๊ธฐ(Level 1)
1
2
3
SELECT *
FROM ANIMAL_INS
ORDER BY animal_id;
- https://school.programmers.co.kr/learn/courses/30/lessons/59034
13. ์ญ์ ์ ๋ ฌํ๊ธฐ(Level 1)
1
2
3
4
SELECT name,
datetime
FROM ANIMAL_INS
ORDER BY animal_id DESC;
- https://school.programmers.co.kr/learn/courses/30/lessons/59035
14. ์คํ๋ผ์ธ/์จ๋ผ์ธ ํ๋งค ๋ฐ์ดํฐ ํตํฉํ๊ธฐ(Level 4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT *
FROM (
SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
product_id,
NULL AS user_id,
sales_amount
FROM OFFLINE_SALE
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '2022-03'
UNION
SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
product_id,
user_id,
sales_amount
FROM ONLINE_SALE
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '2022-03'
) A
ORDER BY A.sales_date, A.product_id, A.user_id;
- https://school.programmers.co.kr/learn/courses/30/lessons/131537
- ์๋ธ ์ฟผ๋ฆฌ ์ ์ต์ข
๊ฒฐ๊ณผ์ ์ ๋ ฌ์ ํ๋ ค๋ฉด
Alias๋ฅผ ์จ์ผ ํ๋ค.
15. ์ํ ๋๋ฌผ ์ฐพ๊ธฐ(Level 1)
1
2
3
4
5
SELECT animal_id,
name
FROM ANIMAL_INS
WHERE intake_condition = 'Sick'
ORDER BY animal_id;
https://school.programmers.co.kr/learn/courses/30/lessons/59036
16. ์ด๋ฆฐ ๋๋ฌผ ์ฐพ๊ธฐ(Level 1)
1
2
3
4
5
SELECT animal_id,
name
FROM ANIMAL_INS
WHERE intake_condition != 'Aged'
ORDER BY animal_id;
- https://school.programmers.co.kr/learn/courses/30/lessons/59037
- ์๋ฌธ์ด ๋๋ ๋ถ๋ถ์ ๋์ด๊ฐ ๋ค๊ณ ์ํ ๋๋ฌผ์ ๊ฒฝ์ฐ
intake_condition๊ฐ์ด'Aged','Sick'๋ ๊ฐ์ ๊ฐ์ง ์ ์์ํ ๋ฐ ์ด์ ๋ฐ๋ก ๋ถ๋ฆฌํด์ผ ํ์ง ์์๊น ์ถ๋ค.
17. ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ(Level 1)
1
2
3
4
SELECT animal_id,
name
FROM ANIMAL_INS
ORDER BY animal_id;
- https://school.programmers.co.kr/learn/courses/30/lessons/59403
18. ์ฌ๋ฌ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ธฐ(Level 1)
1
2
3
4
5
SELECT animal_id,
name,
datetime
FROM ANIMAL_INS
ORDER BY name ASC, datetime DESC;
- https://school.programmers.co.kr/learn/courses/30/lessons/59404
19. ์์ n๊ฐ ๋ ์ฝ๋(Level 1)
1
2
3
4
SELECT name
FROM ANIMAL_INS
ORDER BY datetime
LIMIT 1;
- https://school.programmers.co.kr/learn/courses/30/lessons/59405
LIMITํค์๋๋ฅผ ๊ธฐ์ตํ์.
20. ์กฐ๊ฑด์ ๋ง๋ ํ์์ ๊ตฌํ๊ธฐ(Level 1)
1
2
3
4
SELECT COUNT(*) AS users
FROM USER_INFO
WHERE YEAR(joined) = '2021'
AND age >= 20 AND age <= 29;
- https://school.programmers.co.kr/learn/courses/30/lessons/131535
21. ์
๊ทธ๋ ์ด๋ ๋ ์์ดํ
๊ตฌํ๊ธฐ(Level 2)
1
2
3
4
5
6
7
8
SELECT CI.item_id,
CI.item_name,
CI.rarity
FROM ITEM_INFO PI
JOIN ITEM_TREE IT ON PI.item_id = IT.parent_item_id
JOIN ITEM_INFO CI ON IT.item_id = CI.item_id
WHERE PI.rarity = 'RARE'
ORDER BY item_id DESC;
- https://school.programmers.co.kr/learn/courses/30/lessons/273711
- ๋ฌธ์ ์ ๋๋ก ์ ์ฝ๊ณ ๋ถ๋ชจ๊ฐ ์ ๊ทธ๋ ์ด๋ ๋ ์์ดํ ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, ๊ทธ๋์ ๋ฌธ์ ํธ๋๋ฐ ์ด๋ ค์ ์
- ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์กฐ์ธ ์กฐ๊ฑด์ ์ฐ์ด๋ ์ด์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ๊ณ ๋ ค ๊ฐ๋ฅ
- ์์ฃผ ์กฐํํ ๊ฒฝ์ฐ
WHERE์กฐ๊ฑด์ ์ฐ์ด๋ ์ด ์ธ๋ฑ์ค ๊ณ ๋ ค ๊ฐ๋ฅ
22. Python ๊ฐ๋ฐ์ ์ฐพ๊ธฐ(Level 1)
1
2
3
4
5
6
7
SELECT id,
email,
first_name,
last_name
FROM DEVELOPER_INFOS
WHERE 'Python' IN (skill_1, skill_2, skill_3)
ORDER BY id;
- https://school.programmers.co.kr/learn/courses/30/lessons/276013
INํค์๋ ๋ณต์ ์ด์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ์ค ๊ธฐ์ตํ๊ธฐ
23. ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ฐ์ ์ฐพ๊ธฐ(Level 2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-- ์คํจํ ์ฝ๋
SELECT D.id,
D.email,
D.first_name,
D.last_name
FROM DEVELOPERS D
JOIN SKILLCODES S
ON (D.skill_code & S.code) != 0
WHERE S.name IN ('Python', 'C#')
ORDER BY D.id;
-- ํต๊ณผํ ์ฝ๋ 1
SELECT D.id,
D.email,
D.first_name,
D.last_name
FROM DEVELOPERS D
WHERE EXISTS (
SELECT 1
FROM SKILLCODES S
WHERE S.name IN ('Python','C#')
AND (D.skill_code & S.code) != 0
)
ORDER BY D.id;
-- ํต๊ณผํ ์ฝ๋ 2
SELECT DISTINCT D.id,
D.email,
D.first_name,
D.last_name
FROM DEVELOPERS D JOIN SKILLCODES S
ON (D.skill_code & S.code) != 0
WHERE S.name IN ('Python', 'C#')
ORDER BY D.id;
- https://school.programmers.co.kr/learn/courses/30/lessons/276034
- ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ด๋ฐ ์์ผ๋ก ํ ์ด๋ธ์ ์ค๊ณํ๋ ๊ฒ์ด ์ ์ ํ ๊ฒ์ธ์ง๋ ์๋ฌธ์ด ๋ค์๋ค.
- ์คํจํ ์ฝ๋์ ๋ฌธ์ ์ ์ ๊ฐ๋ฐ์๊ฐ
Python๊ณผC#์ ๋์์ ๊ฐ๊ณ ์์ ๊ฒฝ์ฐ ์ค๋ณต๋ ํ์ด ๋ฐ์ํ๋ค๋ ์ ์ด๋ค. - ๊ธฐ์ตํด์ผ ํ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋นํธ ์ฐ์ฐ์๋ฅผ ํตํ ์ฝ๋ ๊ด๋ฆฌ
EXISTSํค์๋ ํ์ฉ๋ฒJOIN์ ์ค๋ณต ํ ๋ฐ์ ์ฌ๋ถ ํ๋จ ํ์
24. ์์ฑ์ด ์ก์ ์ ๊ตฌํ๊ธฐ(Level 1)
1
2
3
SELECT COUNT(*) AS fish_count
FROM FISH_INFO
WHERE length IS NULL;
- https://school.programmers.co.kr/learn/courses/30/lessons/293258
25. ๊ฐ์ฅ ํฐ ๋ฌผ๊ณ ๊ธฐ 10๋ง๋ฆฌ ๊ตฌํ๊ธฐ(Level 1)
1
2
3
4
5
SELECT id,
length
FROM FISH_INFO
ORDER BY length DESC, id ASC
LIMIT 10;
- https://school.programmers.co.kr/learn/courses/30/lessons/298517
26. ํน์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์ ์ด ์ ๊ตฌํ๊ธฐ(Level 2)
1
2
3
4
SELECT COUNT(*) AS fish_count
FROM FISH_INFO FI JOIN FISH_NAME_INFO FNI
ON FI.fish_type = FNI.fish_type
WHERE FNI.fish_name IN ('BASS', 'SNAPPER');
- https://school.programmers.co.kr/learn/courses/30/lessons/298518
27. ๋์ฅ๊ท ๋ค์ ์์์ ์ ๊ตฌํ๊ธฐ(Level 3)
1
2
3
4
5
6
SELECT PED.id,
COUNT(CED.parent_id) AS child_count
FROM ECOLI_DATA PED LEFT JOIN ECOLI_DATA CED
ON PED.id = CED.parent_id
GROUP BY PED.id
ORDER BY PED.id;
- https://school.programmers.co.kr/learn/courses/30/lessons/299305
COUNT๋ฅผ ํฌํจํ ์ง๊ณ ํจ์๋NULL์ ํฌํจํ์ง ์๋๋ค๋ ์ ์ ๊ธฐ์ตํด์ผ ํ๋ค.
28. ๋์ฅ๊ท ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ถ๋ฅํ๊ธฐ 1(Level 3)
1
2
3
4
5
6
7
8
SELECT id,
CASE
WHEN size_of_colony <= 100 THEN 'LOW'
WHEN size_of_colony <= 1000 THEN 'MEDIUM'
ELSE 'HIGH'
END AS size
FROM ECOLI_DATA
ORDER BY id;
- https://school.programmers.co.kr/learn/courses/30/lessons/299307
29. ํน์ ํ์ง์ ๊ฐ์ง๋ ๋์ฅ๊ท ์ฐพ๊ธฐ(Level 1)
1
2
3
4
SELECT COUNT(*) AS count
FROM ECOLI_DATA
WHERE (genotype & 2) = 0
AND ((genotype & 1) != 0 OR (genotype & 4) != 0);
- https://school.programmers.co.kr/learn/courses/30/lessons/301646
30. ๋ถ๋ชจ์ ํ์ง์ ๋ชจ๋ ๊ฐ์ง๋ ๋์ฅ๊ท ์ฐพ๊ธฐ(Level 2)
1
2
3
4
5
6
7
SELECT C.id,
C.genotype,
P.genotype AS parent_genotype
FROM ECOLI_DATA C JOIN ECOLI_DATA P
ON C.parent_id = P.id
WHERE (C.genotype & P.genotype) = P.genotype
ORDER BY C.id;
- https://school.programmers.co.kr/learn/courses/30/lessons/301647
31. ๋์ฅ๊ท ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ถ๋ฅํ๊ธฐ 2(Level 3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-- NTILE() ํจ์ ์ฌ์ฉ
SELECT
id,
CASE quartile
WHEN 1 THEN 'CRITICAL'
WHEN 2 THEN 'HIGH'
WHEN 3 THEN 'MEDIUM'
WHEN 4 THEN 'LOW'
END AS colony_name
FROM (
SELECT id,
NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) AS quartile
FROM ECOLI_DATA
) A
ORDER BY id;
-- WITH ํค์๋ ์ฌ์ฉ
WITH ranked AS (
SELECT
id,
ROW_NUMBER() OVER (ORDER BY SIZE_OF_COLONY DESC) AS rn,
COUNT(*) OVER () AS total_cnt
FROM ECOLI_DATA
)
SELECT
id,
CASE
WHEN rn <= total_cnt * 0.25 THEN 'CRITICAL'
WHEN rn <= total_cnt * 0.50 THEN 'HIGH'
WHEN rn <= total_cnt * 0.75 THEN 'MEDIUM'
ELSE 'LOW'
END AS colony_name
FROM ranked
ORDER BY id;
- https://school.programmers.co.kr/learn/courses/30/lessons/301649
NTILE()์ ๋ฐ์ดํฐ ์๊ฐ 4์ ๋ฐฐ์์ผ ๋ ๊น๋ํ25%์ฉ, ๊ทธ ์ธ์๋ ๊ท ๋ฑํ๊ฒ ์ชผ๊ฐ ๋ค.- ๋ง์ฝ
25%์ฉ ๊ท ๋ฑํ๊ฒ ๋๋๋ ๊ฒ์ด ์๋๋ผ, ๋น์จ์ ๋ฌ๋ฆฌ ํด์ผ ํ๋ค๋ฉดWITHํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. - ์ฌ๊ธฐ์
WITHํค์๋๋ ์์ ๋ทฐ(์ผ๋ฐCTE)๋ฅผ ์ ์ํ๋ ๋ฌธ๋ฒ์ด๋ค.
32. ํน์ ์ธ๋์ ๋์ฅ๊ท ์ฐพ๊ธฐ(Level 4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WITH RECURSIVE ecoli_tree AS (
SELECT id,
parent_id,
1 AS depth
FROM ECOLI_DATA
WHERE parent_id IS NULL
UNION ALL
SELECT e.id,
e.parent_id,
et.depth + 1
FROM ECOLI_DATA e JOIN ecoli_tree et
ON e.parent_id = et.id
)
SELECT id
FROM ecoli_tree T
WHERE T.depth = 3
ORDER BY id;
- https://school.programmers.co.kr/learn/courses/30/lessons/301650
WITH RECURSIVE๋ ์ฌ๊ทCTE๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ ์ฝ๋์ฒ๋ผUNION ALL์ ํตํด ๋ฃจํธ์ ์์ ๋ ธ๋์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ํฉ์น๋ค.
33. ๋ฉธ์ข
์๊ธฐ์ ๋์ฅ๊ท ์ฐพ๊ธฐ(Level 5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
WITH RECURSIVE ecoli_tree AS (
SELECT
id,
parent_id,
1 AS generation
FROM ECOLI_DATA
WHERE parent_id IS NULL
UNION ALL
SELECT
ED.id,
ED.parent_id,
ET.generation + 1
FROM ECOLI_DATA ED JOIN ecoli_tree ET
ON ED.parent_id = ET.id
)
SELECT
COUNT(*) AS count,
generation
FROM ecoli_tree T
WHERE NOT EXISTS (
SELECT 1
FROM ECOLI_DATA C
WHERE C.parent_id = T.id
)
GROUP BY generation
ORDER BY generation;
- https://school.programmers.co.kr/learn/courses/30/lessons/301651
WHERE NOT EXISTS์ ์์๋ ์ธ๋ถ ์ฟผ๋ฆฌT์ ๊ฐ ํ๋ง๋ค ๋ด๋ถ ํ ์ด๋ธC์ ์ฒด๋ฅผ ์ค์บํ๊ณ , ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ์๊ด ์๋ธ์ฟผ๋ฆฌ๋ผ๊ณ ํ๋ค.parent_id์ด์ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด,C.parent_id = T.id์กฐ๊ฑด์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ์ฌ ์ ์ฒด ์ค์บ์ ํผํ ์ ์๋ค.- ๊ทธ๋ ์ง ์์ผ๋ฉด, ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋น์ฉ์ด ์ปค์ง ์ ์๋ค.
This post is licensed under CC BY 4.0 by the author.