๋ฌธ์ ํ์ด ๊ธฐ๊ฐ : 24๋ 12์ 27์ผ ~
์ต์ ์์ผ๋ก ์ ๋ ฌํ ๋ฌธ์ ์์์ ๋๋ค
๋ณดํธ์์์ ์ค์ฑํํ ๋๋ฌผ
SELECT
I.ANIMAL_ID
, I.ANIMAL_TYPE
, I.NAME
FROM ANIMAL_INS AS I
JOIN ANIMAL_OUTS AS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE SEX_UPON_INTAKE REGEXP 'Intact'
AND SEX_UPON_OUTCOME REGEXP 'Spayed|Neutered'
ORDER BY ANIMAL_ID
์ ์ ์๊ฐ ๊ตฌํ๊ธฐ(2)
WITH RECURSIVE CTE_HOUR AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1
FROM CTE_HOUR
WHERE HOUR < 23
)
SELECT
C.HOUR
, COUNT(A.DATETIME) AS COUNT
FROM CTE_HOUR AS C
LEFT JOIN ANIMAL_OUTS AS A
ON C.HOUR = HOUR(A.DATETIME)
GROUP BY HOUR
WITH RECURSIVE
: SQL์์์ ์ฌ๊ท ํด๋ฆฌ ๊ธฐ๋ฒ
- with์ ์ฌ์ฉํด ๊ฐ์์ ์ฟผ๋ฆฌ์ ์ ์ฅ
- ๋ฐ๋์ UNION์ ์ฌ์ฉํด์ผ ํจ
UNION
: ๋ ๊ฐ ์ด์์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น๋ฌธ
- UNION : ์ค๋ณต๋๋ ๋ ์ฝ๋ ์ ๊ฑฐ
- UNION ALL : ์ค๋ณต๋ ๋ฐ์ดํฐ๋ ํฌํจ
* ์์ UNION ALL ์ฌ์ฉ ์ด์
์ฌ๊ท CTE๋ ์๊ธฐ ์์ ์ ํธ์ถํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์์ฑํจ.
> ์ค๋ณต์ ์ ๊ฑฐํ์ง ์๊ณ ๋ชจ๋ ๋ฐ๋ณต๋ ๊ฒ์ ํฌํจํด์ผ์ง ์ ํํ ์๋ํ๊ธฐ ๋๋ฌธ์
UNION์ด ์๋ UNION ALL์ ์ฌ์ฉํ๋ค
โ๏ธ ํ๋ฆฐ ๋ฌธ์ ํผ๋๋ฐฑ
: COUNT(*)๋ฅผ ์จ์ ์ค๋ฅ ๋ฐ์
COUNT(*)๋ ๋ชจ๋ ํ์ ์นด์ดํธํ๋ฏ๋ก, ANIMAL_OUTS ํ ์ด๋ธ์์ ๋งค์นญ๋์ง ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ์๊ฐ(HOUR)์ ๋ํด 1๋ก ๊ณ์ฐ
> COUNT(A.DATETIME)๋ A.DATETIME์ด NULL์ด ์๋ ๊ฒฝ์ฐ๋ง ์นด์ดํธ
์ฐ์ ์ ์๊ฑฐํธ๊ฐ ๋ด๊ธด ์ฅ๋ฐ๊ตฌ๋
SELECT
CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('MILK', 'YOGURT')
GROUP BY CART_ID
HAVING COUNT(DISTINCT(NAME)) >= 2
ORDER BY CART_ID
์ํ๋ถ๋ฅ๋ณ ๊ฐ์ฅ ๋น์ผ ์ํ์ ์ ๋ณด ์กฐํํ๊ธฐ
SELECT
CATEGORY
, PRICE AS MAX_PRICE
, PRODUCT_NAME
FROM (
SELECT *, MAX(PRICE) OVER (PARTITION BY CATEGORY) AS MAX_MONEY
FROM FOOD_PRODUCT
) AS A
WHERE CATEGORY IN ('๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ')
AND PRICE = MAX_MONEY
ORDER BY PRICE DESC
5์ ์ํ๋ค์ ์ด๋งค์ถ ์กฐํํ๊ธฐ
SELECT
P.PRODUCT_ID
, P.PRODUCT_NAME
, SUM(PRICE * AMOUNT) AS TOTAL_SALES
FROM
FOOD_PRODUCT AS P
JOIN FOOD_ORDER AS O
ON P.PRODUCT_ID = O.PRODUCT_ID
WHERE PRODUCE_DATE LIKE ('2022-05%')
GROUP BY 1
ORDER BY TOTAL_SALES DESC, PRODUCT_ID
์์ธ์ ์์นํ ์๋น ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ
SELECT
I.REST_ID
, I.REST_NAME
, I.FOOD_TYPE
, I.FAVORITES
, I.ADDRESS
, ROUND(AVG(R.REVIEW_SCORE), 2) AS SCORE
FROM
REST_INFO AS I
JOIN REST_REVIEW AS R
ON I.REST_ID = R.REST_ID
WHERE ADDRESS LIKE '์์ธ%'
GROUP BY 1, 2, 3, 4, 5
ORDER BY SCORE DESC, FAVORITES DESC
๊ทธ๋ฃน๋ณ ์กฐ๊ฑด์ ๋ง๋ ์๋น ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ
SELECT
M.MEMBER_NAME
, R.REVIEW_TEXT
, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM
REST_REVIEW AS R
JOIN MEMBER_PROFILE AS M
ON R.MEMBER_ID = M.MEMBER_ID
WHERE M.MEMBER_ID = (
SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC
LIMIT 1
)
ORDER BY 3, 2
๋ , ์, ์ฑ๋ณ ๋ณ ์ํ ๊ตฌ๋งค ํ์ ์ ๊ตฌํ๊ธฐ
SELECT
YEAR(S.SALES_DATE) AS YEAR
, MONTH(S.SALES_DATE) AS MONTH
, I.GENDER
, COUNT(DISTINCT S.USER_ID) AS USERS
FROM
USER_INFO AS I
JOIN ONLINE_SALE AS S
ON I.USER_ID = S.USER_ID
WHERE I.GENDER IS NOT NULL
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3
์คํ๋ผ์ธ/์จ๋ผ์ธ ํ๋งค ๋ฐ์ดํฐ ํตํฉํ๊ธฐ
SELECT
DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE
, PRODUCT_ID
, USER_ID
, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE ('2022-03%') -- ONLINE_SALE ํ
์ด๋ธ์ ์ ์ฉ
UNION
SELECT
DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE
, PRODUCT_ID
, NULL
, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE ('2022-03%') -- ์ ์ฒด ํ
์ด๋ธ์ด ์๋, OFFLINE_SALE ํ
์ด๋ธ์ ์ ์ฉ
ORDER BY 1, 2, 3 -- ๋ณํฉ๋ ์ ์ฒด ๊ฒฐ๊ณผ์ ์ ์ฉ๋จ
* ์์ ์ฟผ๋ฆฌ์์ WHERE์ ์ SELECT ๊ตฌ๋ฌธ์ ๊ฒฐ๊ณผ๋ก ์ ํ๋์ด ์ ์ฒด ํ
์ด๋ธ์ ์ ์ฉ๋์ง ์์ง๋ง,
ORDER BY์ ๋ณํฉ๋ ๊ฒฐ๊ณผ์ ์ ์ฉ๋๋ค.
UNION
- UNION : ์ค๋ณต๋ ํ์ ์ ๊ฑฐํ๊ณ ๋ณํฉ
- UNION ALL : ์ค๋ณต๋ ํ์ ํฌํจํ์ฌ ๋ณํฉ
* WHERE ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง
* ๊ฐ๊ฐ ์กฐ๊ฑด ์ ์ฉํ๊ณ union
SELECT column1, column2 FROM table1
WHERE condition1
UNION
SELECT column1, column2 FROM table2
WHERE condition2;
* union ๋ณํฉ ํ ์กฐ๊ฑด ์ ์ฉ
SELECT * FROM (
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2
) AS merged_table
WHERE final_condition;
์ทจ์๋์ง ์์ ์ง๋ฃ ์์ฝ ์กฐํํ๊ธฐ
o
์ฃผ๋ฌธ๋์ด ๋ง์ ์์ด์คํฌ๋ฆผ๋ค ์กฐํํ๊ธฐ
o
์ ์ ๋ณ ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋งค์ถ์ก ์ง๊ณํ๊ธฐ
o
์๋์ฐจ ๋์ฌ ๊ธฐ๋ก ๋ณ ๋์ฌ ๊ธ์ก ๊ตฌํ๊ธฐ
o
ํน์ ๊ธฐ๊ฐ๋์ ๋์ฌ ๊ฐ๋ฅํ ์๋์ฐจ๋ค์ ๋์ฌ๋น์ฉ ๊ตฌํ๊ธฐ
o
FrontEnd ๊ฐ๋ฐ์ ์ฐพ๊ธฐ
o
์ธ์ด๋ณ ๊ฐ๋ฐ์ ๋ถ๋ฅํ๊ธฐ
o
์ฐ๊ฐ ํ๊ฐ์ ์์ ํด๋นํ๋ ํ๊ฐ ๋ฑ๊ธ ๋ฐ ์ฑ๊ณผ๊ธ ์กฐํํ๊ธฐ
o
ํน์ ์ธ๋์ ๋์ฅ๊ท ์ฐพ๊ธฐ
o