<์ค๋์ ํ์ต>
- SQL ์ฝ๋์นดํ : โญ๏ธโญ๏ธ๊ธฐ์ด ๋ ๋ฒจ
- Python_๋ฌธ์์ด ์์ ์๋ฃ ๋ณต์ต
- Python_๋ฌธํ๋ _แแ งแซแแ ณแธแแ ฎแซแแ ฆ
<ํ์ต๋ด์ฉ ์ ๋ฆฌ>
SQL ์ฝ๋์นดํ : โญ๏ธโญ๏ธ๊ธฐ์ด ๋ ๋ฒจ
Q. ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ
์ ์์ ๊ฐ ๋๋ฌผ ์ค, ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธธ์๋ ๋๋ฌผ ๋ ๋ง๋ฆฌ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ธด ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.


- ๐ซ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ง์ง๋ง, ์ ๊ทผ์ด ๋ณต์กํจ.
select
Date_diff.ANIMAL_ID
, Date_diff.NAME
from (
SELECT
ai.ANIMAL_ID
, ai.NAME
, datediff(ao.DATETIME, ai.DATETIME) as date_diff
from ANIMAL_INS ai
inner join ANIMAL_OUTS ao
on ai.ANIMAL_ID=ao.ANIMAL_ID
order by date_diff desc
) as Date_diff
limit 2
- ๐ก ๋ ๊ฐ๋จํ ์ฟผ๋ฆฌ
SELECT
ai.ANIMAL_ID
, ai.NAME
from ANIMAL_INS ai
inner join ANIMAL_OUTS ao
on ai.ANIMAL_ID=ao.ANIMAL_ID
order by datediff(ao.DATETIME, ai.DATETIME) desc
limit 2
<์ค๋ต๋ ธํธ>
ORDER BY์๋ (1)์ง๊ณํจ์ (2)๋ณ์นญ (3)๊ณ์ฐ์ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ฑฐ์ ๋ง์ง๋ง ์คํ์์๋ก, ์์ ๋ชจ๋ ์ง๊ณ๊ฐ ๋๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๊ณ์ฐ์ด ๊ฐ๋ฅ.
- ์ง๊ณํจ์: SELECT, HAVING, ORDER BY
Q. ๋ณดํธ์์์ ์ค์ฑํํ ๋๋ฌผ
SELECT
ai.ANIMAL_ID
, ai.ANIMAL_TYPE
, ai.NAME
from ANIMAL_INS ai
inner join ANIMAL_OUTS ao
on ai.ANIMAL_ID=ao.ANIMAL_ID
where ai.SEX_UPON_INTAKE like "%Intact%"
and (ao.SEX_UPON_OUTCOME like "%Neutered%"
or ao.SEX_UPON_OUTCOME like "%Spayed%")
order by ai.ANIMAL_ID
<์ค๋ต๋ ธํธ>
WHERE ์กฐ๊ฑด์์ OR์ด ์ฐ์ ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ ํ์ ํด์ ๊ดํธ ์ฌ์ฉํ๊ธฐ
์ฌ์ ์บ ํ SQL ๋ฌ๋ฆฌ๊ธฐ๋ฐ ๋ฌธ์ ํ์ด
Lv4. ๋จ๊ณจ ๊ณ ๊ฐ๋ ์ฐพ๊ธฐ ๐ด๐ฉ
๋๋ผ๋ณ๋ก ์ด ์ฃผ๋ฌธ ๊ธ์ก์ด ๊ฐ์ฅ ๋์ ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ๊ทธ ๊ณ ๊ฐ์ ์ด ์ฃผ๋ฌธ ๊ธ์ก์ ์กฐํํ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.

์ดํดํ๊ธฐ ์ํ ๋ชธ๋ถ๋ฆผ....๐ญ

- ์์งํ ๊ฑฐ ๋ณต๊ธฐํ๋ฉด์ ํ์์ ๋ 1ํธ ์ฑ๊ณต ๐

SELECT
c.Country
, c.CustomerName
, SUM(TotalAmount)
FROM Customers c
LEFT JOIN Orders o
ON c.CustomerID=o.CustomerID
GROUP BY c.Country, c.CustomerName
HAVING SUM(TotalAmount) = (-- = ("๊ตญ๊ฐ๋ณ MAX์ธ ๊ฒ ")
SELECT MAX(sum_total)
FROM (
SELECT SUM(o2.TotalAmount) AS sum_total
FROM Customers c2
LEFT JOIN Orders o2
ON c2.CustomerID=o2.CustomerID
WHERE c2.Country = c.Country
GROUP BY c2.CustomerID
) AS total_amount
);
Python ๋ฌธํ๋
๋ฌธ์ 4-2) ์ผํ๋ก ๊ตฌ๋ถ๋ ์ ์ 3๊ฐ์ ํ๊ท
๋ฌธ์ ์ค๋ช
์ผํ๋ก ๊ตฌ๋ถ๋ ์ ์ 3๊ฐ๋ฅผ ์
๋ ฅ๋ฐ์ ํ๊ท ์ ์์ ๋์งธ ์๋ฆฌ๊น์ง ์ถ๋ ฅํ์ธ์.
์
๋ ฅ ์์:
10,20,30
๋ชฉํ ์ถ๋ ฅ:
20.00
- ์ ์ถํ ๋ต
data = input()
data_list = data.split(",")
a, b, c = map(int, data_list)
avg = sum([a, b, c]) / len(data_list)
print(f"{avg:.2f}")
- GPT ์ถ์ฒ ๊ฐ๋จํ ๋ต
nums = list(map(int, input().split(",")))
avg = sum(nums) / len(nums)
print(f"{avg:.2f}")
- mean()ํจ์ ์ฌ์ฉ
from statistics import mean
a, b, c = map(int, input("์ผํ๋ก ๊ตฌ๋ถํ ์ ์ ์ธ ๊ฐ๋ฅผ ์
๋ ฅํ์ธ์: ").split(","))
print(mean([a, b, c]))
<์ค๋ต๋ ธํธ>
โ Python์๋ avg()ํจ์๊ฐ ์์
SUM() / LEN() ์ฌ์ฉํด์ ํ๊ท ๊ตฌํจ
โ SUM(๋ฐ๋ณต๊ฐ๋ฅํ ๊ฐ์ฒด, ์์ ๊ฐ)
- ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด: ๋ฆฌ์คํธ, ํํ, ๋์ ๋๋ฆฌ, ์งํฉ
- ์์ ๊ฐ: SUM์ ์์ํ ๊ฐ (๊ธฐ๋ณธ: 0)
- SUM ์์ ๋ค์ด๊ฐ๋ ๊ฐ์ฒด์ Type์ '์ซ์ํ'์ด์ด์ผ ํ๋ค.
โ LEN(๊ฐ์ฒด)
- ๋ฌธ์์ด(string), ๋ฆฌ์คํธ(list), ํํ(tuple), ๋์ ๋๋ฆฌ(dictionary), ์งํฉ(set) ๋ฑ
๋ฌธ์ 4-5) ์ผํ + ๊ณต๋ฐฑ์ด ์์ธ ์ ๋ ฅ ์ฒ๋ฆฌ
- ์ค๋ต
data = input()
data_list = list(map(int, data.split(",").split()))
avg = sum(data_list) / len(data_list)
print(avg)
- ์์ ํ ๋ต
data = input()
data_list = list(map(int, data.replace(",", "").split()))
avg = int(sum(data_list) / len(data_list))
print(avg)
<์ค๋ต๋ ธํธ>
โ data.split(",").split()
------------- ----
=>๊ฒฐ๊ณผ: ๋ฆฌ์คํธ ใด> ๋ฌธ์์ด์ ์ ์ฉ ๊ฐ๋ฅํ ํจ์
๐กreplace()๋ก ๊ตฌ๋ถ์ ์ฒ๋ฆฌ → split์ผ๋ก ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋ฌธ์ ๋๋๊ธฐ
๋ฌธ์ 4-10) ๋ชจ๋ ๊ตฌ๋ถ์ ์ฒ๋ฆฌํ๊ธฐ (๋์ , ์ ํํ๊ธฐ) ๐
import re / re.findall ๋ณต์ต
๋ฌธ์ ์ค๋ช
์
๋ ฅ์ด ๊ณต๋ฐฑ / ์ผํ / # ์ค ์ด๋ค ๊ฒ์ผ๋ก ๊ตฌ๋ถ๋์ด๋ ๋ ์ ์์ ํฉ์ด ์ถ๋ ฅ๋๋๋ก ๋ง๋์ธ์.
import re
data = input("์
๋ ฅํ ๊ฐ: ")
nums_list = list(map(int, re.findall(r'\d+', data)))
list_sum = sum(nums_list)
print(f"์
๋ ฅํ ๋ชจ๋ ์์ ํฉ: {list_sum}")
๋ฌธ์ 10) ๋ ์ง ๋ฌธ์์ด ๋ถ๋ฆฌํ์ฌ ์ ์ฅํ๊ธฐ
๋ ์ง์ 0๊น์ง ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ
๋ฌธ์ ์ค๋ช "2026/01/04" ๋ฌธ์์ด์ / ๊ธฐ์ค์ผ๋ก ๋๋์ด ์ฐ, ์, ์ผ์ ๊ฐ๊ฐ ๋ณ์์ ๋ด์ ์ถ๋ ฅํ์ธ์.
๋ ์ง Type = INT
f-string ํจ์ → {}์ ํ์์ ์ง์ ํด์ค๋ค "02d"
- d: ์ ์(decimal)
- 2: 2์นธ
- 0: ๋น ์นธ์ ๋ค์ด๊ฐ ์ซ์
date_str = "2026/01/04"
year, month, day = map(int, date_str.split("/"))
print(f"์ฐ๋:{year}, ์:{month:02d}, ์ผ:{day:02d}")
๋ ์ง Type = str
zfill(๋ฌธ์์ด ๊ธธ์ด ์ง์ ์ซ์) : ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ์ซ์๋ณด๋ค ์งง์ผ๋ฉด, ๋น ์นธ์ 0์ ์ฝ์
* ๋ฌธ์์ด ์ ์ฉ ํจ์
date_str = "2026/01/04"
year, month, day = date_str.split("/")
print(f"์ฐ๋:{year}, ์:{month.zfill(2)}, ์ผ:{day.zfill(2)}")
<๋ด์ผ์ ํ์ต>
- ํ ์ํฐํด(https://yozm.wishket.com/magazine/detail/1070/)
- SQL ์ฝ๋์นดํ_๊ธฐ์ด ๋ ๋ฒจ ์๋ฃ ๋ชฉํ
- SQL ์ฌ์บ ๋ฌ๋ฆฌ๊ธฐ๋ฐ ๋ฌธ์ _5๋ฒ ๋ฌธ์ ํ์ด
- ํ์ด์ฌ ์ธ์ 2ํ์ฐจ
- ํ์ด์ฌ 2ํ์ฐจ_๋ณต์ต๊ณผ์ ์ ์ถ
- ํ์ด์ฌ 1ํ์ฐจ_์ฌํ๊ณผ์ ์๋