โ โ < 59๋ฒ - ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ๋์ฌ์ค / ๋์ฌ ๊ฐ๋ฅ ์ฌ๋ถ ๊ตฌ๋ถํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/157340
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
< ํต์ฌ ๊ฐ๋ >
# ์ปฌ๋ผ between A and B
โ๏ธ์ซ์ ๋ฒ์์์ ์ฌ์ฉ
SELECT *
FROM products
WHERE price BETWEEN 100 AND 300;
โ๏ธ๋ ์ง ๋ฒ์์์ ์ฌ์ฉ
SELECT *
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-03-31';
โ๏ธ๋ฌธ์์ด ๋ฒ์์์ ์ฌ์ฉ
SELECT *
FROM employees
WHERE last_name BETWEEN 'A' AND 'M';
# case when ์ปฌ๋ผ in (์๋ธ์ฟผ๋ฆฌ) then
case when ์ปฌ๋ผ in (์๋ธ์ฟผ๋ฆฌ ์ปฌ๋ผ) then ๊ฐ
else ๊ฐ end
# Question )
์ ๋ group by๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์ง๊ณํจ์, count, max, min, sum, avg๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ผ๊ณ ๋ฐฐ์ ์ต๋๋ค ๊ทธ๋ฌ๋ ์ ๋ต ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ case when ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค group by๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ์ง ์์ ์๋ ์๋์?
# Answer )
group by๋ ์ง๊ณ ํจ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ ์ํ๋ ๋๋ก ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
# ๋ด๊ฐ ํผ ์ฝ๋
with cte as (
select history_id,
car_id,
date_format(start_date, '%Y-%m-%d') as start_date,
date_format(end_date, '%Y-%m-%d') as end_date
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
), cte2 as (
select car_id,
case when '2022-10-16' between start_date and end_date then 0
else 1 end as availability
from cte
)
select car_id,
case when min(availability) = 0 then '๋์ฌ์ค'
else '๋์ฌ ๊ฐ๋ฅ' end as availability
from cte2
group by car_id
order by car_id desc
# ์ ๋ต ์ฝ๋
select car_id,
case when car_id in (
select distinct car_id
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where '2022-10-16' between date_format(start_date, '%Y-%m-%d')
and date_format(end_date, '%Y-%m-%d')
) then '๋์ฌ์ค'
else '๋์ฌ ๊ฐ๋ฅ' end as availability
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
order by car_id desc
โ < 60๋ฒ - ๋ , ์, ์ฑ๋ณ ๋ณ ์ํ ๊ตฌ๋งค ํ์ ์ ๊ตฌํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/131532
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
SELECT year(SALES_DATE) as year,
month(SALES_DATE) as month,
gender,
count(distinct o.user_id) as users
from ONLINE_SALE o
inner join USER_INFO u
on o.USER_ID = u.user_id
where gender is not null
group by year(SALES_DATE), month(SALES_DATE), gender
order by year(SALES_DATE), month(SALES_DATE), gender
# Question )
์ count(distinct o.user_id)๋ฅผ ์ฌ์ฉํ์ง ์๊ณ count(*) ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ต์ธ๊ฐ?
# Answer )
์๋ฅผ ๋ค์ด์ 2022๋ / 1์ / ์ฑ๋ณ์ด 1์ธ ํ์์ด ์ฌ๋ฌ๋ฒ ๊ตฌ๋งคํ๋ค๋ฉด count(*)๋ ์ฌ๋ฌ๋ฒ ์นด์ดํธํ๋ค
ํ์์ ์๋ฅผ ์ ๋๋ ํ์์ ๊ณ ์ ํ ์๋ฅผ ์ธ์ผ ํ๋ฏ๋ก count(distinct user_id)๋ก ์นด์ดํธํด์ผ ํ๋ค
count(*)
null๊ฐ O / ์ค๋ณต๊ฐ O
count(์ปฌ๋ผ)
null๊ฐ X / ์ค๋ณต๊ฐ O
count(distinct ์ปฌ๋ผ)
null๊ฐ X / ์ค๋ณต๊ฐ X
ํ์์๋ฅผ ์ ๋ ์ฌ์ฉํ๋ค
โ < 61๋ฒ - ์์ธ์ ์์นํ ์๋น ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/131118
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select i.rest_id,
i.rest_name,
i.food_type,
i.favorites,
i.address,
round(avg(review_score), 2) as score
from REST_INFO i
inner join rest_review r
on i.rest_id = r.rest_id
where address like '์์ธ%'
group by i.rest_id, i.rest_name, i.food_type,
i.favorites, i.address
order by round(avg(review_score), 2) desc, i.favorites desc
# ํต์ฌ ๊ฐ๋
์์ธ%
์์ธ๋ก ์์ํ๋ ์ฃผ์๋ฅผ ํํฐ๋งํ๋ค (์ง์ง์์ธ)
%์์ธ%
์์ธ์ด ์๋์ง๋ง ์ฃผ์ ์ค ์์ธ์ด ๋ค์ด๊ฐ๋ ์ฃผ์๋ฅผ ํํฐ๋งํ๋ค (๊ฐ์ง์์ธ)
< 62๋ฒ - ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ์ฅ๊ธฐ/๋จ๊ธฐ ๋์ฌ ๊ตฌ๋ถํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/151138
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
SELECT history_id, car_id,
date_format(start_date, '%Y-%m-%d') as start_date,
date_format(end_date, '%Y-%m-%d') as end_date,
case when timestampdiff(day, start_date, end_date) >= 29 then '์ฅ๊ธฐ ๋์ฌ'
else '๋จ๊ธฐ ๋์ฌ' end as rent_type
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where year(START_DATE) = 2022 and month(START_DATE) = 9
order by history_id desc
# ์ซ์๋ก order by ์ง์ ๊ฐ๋ฅํ๋ค
# timestampdiff ์กฐ๊ฑด์ ๋ฐ๋ผ์ +1์ ํด์ผํ ์๋ ์๋ค
< 63๋ฒ - ์๋์ฐจ ํ๊ท ๋์ฌ ๊ธฐ๋ก ๊ตฌํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/157342
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select car_id,
round(avg(timestampdiff(day, start_date, end_date)+1),1) as AVERAGE_DURATION
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
having round(avg(timestampdiff(day, start_date, end_date)+1),1) >= 7
order by 2 desc, 1 desc
< 64๋ฒ - ํค๋น ์ ์ ๊ฐ ์์ ํ ์ฅ์ >
https://school.programmers.co.kr/learn/courses/30/lessons/77487
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select *
from PLACES
where host_id in (
select host_id
from PLACES
group by host_id
having count(*) >= 2
)
order by id
'Algorithm๐ค > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL] ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ (70๋ฒ~) (2) | 2024.09.15 |
---|---|
[SQL] ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ (65๋ฒ~69๋ฒ) (0) | 2024.09.10 |
[SQL] ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ (49๋ฒ~58๋ฒ) (1) | 2024.09.04 |
[SQL] ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ (39๋ฒ~ 48๋ฒ) - ์๋ธ ์ฟผ๋ฆฌ ๋ฌธ์ ๋ฅผ / ์กฐ์ธ์ผ๋ก ํ๊ธฐ / ์๋์ฐ ํจ์๋ก ํ๊ธฐ (3) | 2024.09.04 |
[SQL] ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ (31๋ฒ~38๋ฒ) (2) | 2024.09.03 |