๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DataBase/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] SQL Lv.2 ๋ฌธ์ œ ํ’€์ด ๋ชจ์Œ

by YeonBu 2024. 8. 14.
728x90

 

 

 

Level 2. GROUP BY

๋™๋ช… ๋™๋ฌผ ์ˆ˜ ์ฐพ๊ธฐ

 

 

๋ฌธ์ œ

ANIMAL_INS ํ…Œ์ด๋ธ” ๊ตฌ์กฐ


๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋™๋ฌผ ์ด๋ฆ„ ์ค‘ ๋‘ ๋ฒˆ ์ด์ƒ ์“ฐ์ธ ์ด๋ฆ„๊ณผ ํ•ด๋‹น ์ด๋ฆ„์ด ์“ฐ์ธ ํšŸ์ˆ˜๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ์ด๋ฆ„์ด ์—†๋Š” ๋™๋ฌผ์€ ์ง‘๊ณ„์—์„œ ์ œ์™ธํ•˜๋ฉฐ, ๊ฒฐ๊ณผ๋Š” ์ด๋ฆ„ ์ˆœ์œผ๋กœ ์กฐํšŒํ•ด์ฃผ์„ธ์š”.

 

ํ’€์ด

๋”๋ณด๊ธฐ

1. ORACLE, MYSQL

SELECT NAME, COUNT(NAME) AS COUNT
  FROM ANIMAL_INS
 WHERE NAME IS NOT NULL
 GROUP BY NAME
HAVING COUNT(NAME) > 1
 ORDER BY NAME;



 

 

 

Level 2. SUM, MAX, MIN

๊ฐ€๊ฒฉ์ด ์ œ์ผ ๋น„์‹ผ ์‹ํ’ˆ์˜ ์ •๋ณด ์ถœ๋ ฅํ•˜๊ธฐ

 

 

๋ฌธ์ œ

FOOD_PROUDCT ํ…Œ์ด๋ธ” ๊ตฌ์กฐ

FOOD_PRODUCT ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€๊ฒฉ์ด ์ œ์ผ ๋น„์‹ผ ์‹ํ’ˆ์˜ ์‹ํ’ˆ ID, ์‹ํ’ˆ ์ด๋ฆ„, ์‹ํ’ˆ ์ฝ”๋“œ, ์‹ํ’ˆ๋ถ„๋ฅ˜, ์‹ํ’ˆ ๊ฐ€๊ฒฉ์„ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

ํ’€์ด

๋”๋ณด๊ธฐ

1. ORACLE, MYSQL

 1) WHERE์ ˆ์— ์„œ๋ธŒ ์ฟผ๋ฆฌ

SELECT *
  FROM FOOD_PRODUCT FP
 WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);

 

 2) JOIN ์‚ฌ์šฉ

SELECT FP.*
  FROM FOOD_PRODUCT FP
  JOIN (
        SELECT MAX(PRICE) AS MX_PRICE
          FROM FOOD_PRODUCT
        ) MX_FP
    ON FP.PRICE = MX_FP.MX_PRICE;

 

 3) WITH์ ˆ ์‚ฌ์šฉ(์žฌ์‚ฌ์šฉ์„ฑ ๊ณ ๋ ค)

WITH MAXPRICE AS (
    SELECT MAX(PRICE) AS MX_PRICE
      FROM FOOD_PRODUCT
)
SELECT *
  FROM FOOD_PRODUCT FP
  JOIN MAXPRICE MP
    ON FP.PRICE = MP.MX_PRICE;



 

 

 

Level 2. GROUP BY

์ง„๋ฃŒ๊ณผ๋ณ„ ์ด ์˜ˆ์•ฝ ํšŸ์ˆ˜ ์ถœ๋ ฅํ•˜๊ธฐ

 

 

๋ฌธ์ œ

APPOINTMENT ํ…Œ์ด๋ธ” ๊ตฌ์กฐ

APPOINTMENT ํ…Œ์ด๋ธ”์—์„œ 2022๋…„ 5์›”์— ์˜ˆ์•ฝํ•œ ํ™˜์ž ์ˆ˜๋ฅผ ์ง„๋ฃŒ๊ณผ์ฝ”๋“œ ๋ณ„๋กœ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ, ์ปฌ๋Ÿผ๋ช…์€ '์ง„๋ฃŒ๊ณผ ์ฝ”๋“œ', '5์›”์˜ˆ์•ฝ๊ฑด์ˆ˜'๋กœ ์ง€์ •ํ•ด์ฃผ์‹œ๊ณ  ๊ฒฐ๊ณผ๋Š” ์ง„๋ฃŒ๊ณผ๋ณ„ ์˜ˆ์•ฝํ•œ ํ™˜์ž ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ณ , ์˜ˆ์•ฝํ•œ ํ™˜์ž ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ง„๋ฃŒ๊ณผ ์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

 

ํ’€์ด

๋”๋ณด๊ธฐ

1. ORACLE, MYSQL

SELECT MCDP_CD AS "์ง„๋ฃŒ๊ณผ ์ฝ”๋“œ", COUNT(MCDP_CD) AS "5์›”์˜ˆ์•ฝ๊ฑด์ˆ˜"
  FROM APPOINTMENT
 WHERE EXTRACT(YEAR FROM APNT_YMD) = 2022
   AND EXTRACT(MONTH FROM APNT_YMD) = 5
 GROUP BY MCDP_CD
 ORDER BY COUNT(MCDP_CD), MCDP_CD;



 

 

 

Level 2. STRING, DATE

์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ์ค‘๊ณ ๊ฑฐ๋ž˜ ์ƒํƒœ ์กฐํšŒํ•˜๊ธฐ

 

 

๋ฌธ์ œ

USED_GOODS_BOARD ํ…Œ์ด๋ธ” ๊ตฌ์กฐ

USED_GOODS_BOARD ํ…Œ์ด๋ธ”์—์„œ 2022๋…„ 10์›” 5์ผ์— ๋“ฑ๋ก๋œ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œ๋ฌผ์˜ ๊ฒŒ์‹œ๊ธ€ ID, ์ž‘์„ฑ์ž ID, ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ, ๊ฐ€๊ฒฉ, ๊ฑฐ๋ž˜์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๊ฑฐ๋ž˜์ƒํƒœ๊ฐ€ SALE ์ด๋ฉด ํŒ๋งค์ค‘, RESERVED์ด๋ฉด ์˜ˆ์•ฝ์ค‘, DONE์ด๋ฉด ๊ฑฐ๋ž˜์™„๋ฃŒ ๋ถ„๋ฅ˜ํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์‹œ๊ณ , ๊ฒฐ๊ณผ๋Š” ๊ฒŒ์‹œ๊ธ€ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

 

ํ’€์ด

๋”๋ณด๊ธฐ

1. ORACLE, MYSQL

SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
       CASE WHEN STATUS = 'SALE' THEN 'ํŒ๋งค์ค‘'
            WHEN STATUS = 'RESERVED' THEN '์˜ˆ์•ฝ์ค‘'
            ELSE '๊ฑฐ๋ž˜์™„๋ฃŒ'
        END AS STATUS
  FROM USED_GOODS_BOARD
 WHERE CREATED_DATE = '2022-10-05'
 ORDER BY BOARD_ID DESC;

 

๋ฐ˜์‘ํ˜•