IT/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] MySQL Lv.2 ๋ฌธ์ œํ’€์ด ์ •๋‹ต ๋ชจ์Œ (feat. ์ฝ”๋”ฉํ…Œ์ŠคํŠธ)

zi0_0 2024. 12. 20. 08:20

 


๐Ÿš€ MySQL ๋ฌธ๋ฒ• ์ด์ •๋ฆฌ ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

[MySQL] ๊ธฐ๋ณธ SQL ๋ฌธ๋ฒ• ์ด์ •๋ฆฌ & ๋ชจ์Œ

โœ”๏ธ ์ฃผ์˜ - SELECT ์ ˆ์—์„œ ์ƒ์„ฑํ•œ ๋ณ„์นญ์„ Where ์ ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ- Partition๊ณผ ๊ฐ™์€ ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” Where ์ ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ - ์„œ๋ธŒ์ฟผ๋ฆฌ ๋งŒ๋“ค๊ณ , ๋ณ„์นญ ์•ˆ ์‚ฌ์šฉํ•ด๋„ ๋งŒ๋“ค์–ด์•ผ ํ•จ   ๐Ÿ“ NULL ์ฒ˜

thswldud.tistory.com

 


 

์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋ฌธ์ œ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค

 

 

๋ฌธ์ œ ํ’€์ด ๊ธฐ๊ฐ„ : 24๋…„ 12์›” 20์ผ ~ 23์ผ

์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ

SELECT MIN(DATETIME) AS ์‹œ๊ฐ„
FROM ANIMAL_INS

 

๊ณ ์–‘์ด์™€ ๊ฐœ๋Š” ๋ช‡ ๋งˆ๋ฆฌ ์žˆ์„๊นŒ

SELECT
    ANIMAL_TYPE
    , COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

 

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

SELECT
    NAME
    , COUNT (NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT >= 2
ORDER BY NAME
  • COUNT(NAME) = COUNT(*) ์ด์ง€๋งŒ, NAME์ด๋ผ๊ณ  ํŠน์ • ์ง€์œผ๋ฉด, null ๊ฐ’์„ ์ œ์™ธํ•˜๊ณ  count๋ฅผ ํ•œ๋‹ค 

 

๋ฃจ์‹œ์™€ ์—˜๋ผ ์ฐพ๊ธฐ

SELECT
    ANIMAL_ID
    , NAME
    , SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID

 

์ด๋ฆ„์— el์ด ๋“ค์–ด๊ฐ€๋Š” ๋™๋ฌผ ์ฐพ๊ธฐ

SELECT 
    ANIMAL_ID
    , NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%el%'
AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME

 

๋™๋ฌผ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT COUNT(ANIMAL_ID) AS COUNT
FROM ANIMAL_INS

 

์ค‘๋ณต ์ œ๊ฑฐํ•˜๊ธฐ

SELECT COUNT(DISTINCT(NAME))
FROM ANIMAL_INS

 

์ค‘์„ฑํ™” ์—ฌ๋ถ€ ํŒŒ์•…ํ•˜๊ธฐ

SELECT
    ANIMAL_ID
    , NAME
    , IF(SEX_UPON_INTAKE LIKE 'Neutered%' 
         OR SEX_UPON_INTAKE LIKE 'Spayed%', 'O', 'X') AS ์ค‘์„ฑํ™”
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

NULL ์ฒ˜๋ฆฌํ•˜๊ธฐ

SELECT 
    ANIMAL_TYPE
    , IFNULL(NAME, 'No name') AS NAME,
    , SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 

์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(1)

SELECT
    HOUR(DATETIME) AS HOUR
    , COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR

 

DATETIME์—์„œ DATE๋กœ ํ˜• ๋ณ€ํ™˜

SELECT
    ANIMAL_ID
    , NAME
    , DATE_FORMAT(DATETIME, '%Y-%m-%d') AS ๋‚ ์งœ 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

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

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

 

3์›”์— ํƒœ์–ด๋‚œ ์—ฌ์„ฑ ํšŒ์› ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ

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) = 3
    AND GENDER = 'W'
    AND TLNO IS NOT NULL   
ORDER BY MEMBER_ID

 

์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ ์ƒํ’ˆ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT
    SUBSTR(PRODUCT_CODE, 1, 2) AS CATEGORY
    , COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY

 

๊ฐ€๊ฒฉ๋Œ€ ๋ณ„ ์ƒํ’ˆ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT
    TRUNCATE(PRICE, -4) AS PRICE_GROUP
    , COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP

 

TRONCATE(์ˆซ์ž, ๋ฒ„๋ฆด ์ž๋ฆฟ์ˆ˜) 
: ์ˆซ์ž๋ฅผ ๋ฒ„๋ฆด ์ž๋ฆฟ์ˆ˜ ์•„๋ž˜๋กœ ๋ฒ„๋ฆผ

  • SELECT TRUNCATE(12345.1234567 ,1)  >>  12345.1
  • SELECT TRUNCATE(12345.1234567 ,4)  >>  12345.1234
  • SELECT TRUNCATE(12345.1234567 ,-1)  >>  12340
  • SELECT TRUNCATE(12345.1234567 ,-2)   >>  12300 

 

์ƒํ’ˆ ๋ณ„ ์˜คํ”„๋ผ์ธ ๋งค์ถœ ๊ตฌํ•˜๊ธฐ

SELECT
    PRODUCT_CODE
    , SUM(PRICE * SALES_AMOUNT) AS SALES
FROM PRODUCT AS P
JOIN OFFLINE_SALE AS O
ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY P.PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE


์žฌ๊ตฌ๋งค๊ฐ€ ์ผ์–ด๋‚œ ์ƒํ’ˆ๊ณผ ํšŒ์› ๋ฆฌ์ŠคํŠธ ๊ตฌํ•˜๊ธฐ

SELECT
    USER_ID
    , PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC

 

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

SELECT
    MCDP_CD AS ์ง„๋ฃŒ๊ณผ์ฝ”๋“œ
    , COUNT(*) AS 5์›”์˜ˆ์•ฝ๊ฑด์ˆ˜
FROM APPOINTMENT
WHERE APNT_YMD LIKE '2022-05%'
GROUP BY MCDP_CD
ORDER BY 5์›”์˜ˆ์•ฝ๊ฑด์ˆ˜, ์ง„๋ฃŒ๊ณผ์ฝ”๋“œ

 

์„ฑ๋ถ„์œผ๋กœ ๊ตฌ๋ถ„ํ•œ ์•„์ด์Šคํฌ๋ฆผ ์ด ์ฃผ๋ฌธ๋Ÿ‰

SELECT
    INGREDIENT_TYPE
    , SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM 
    FIRST_HALF AS F
    JOIN ICECREAM_INFO AS I
    ON F.FLAVOR = I.FLAVOR
GROUP BY 
    INGREDIENT_TYPE
ORDER BY 
    TOTAL_ORDER

 

์กฐ๊ฑด์— ๋งž๋Š” ๋„์„œ์™€ ์ €์ž ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅํ•˜๊ธฐ

SELECT
    B.BOOK_ID
    , A.AUTHOR_NAME
    , DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK AS B
    JOIN AUTHOR AS A
    ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '๊ฒฝ์ œ'
ORDER BY PUBLISHED_DATE

 

์ž๋™์ฐจ ์ข…๋ฅ˜ ๋ณ„ ํŠน์ • ์˜ต์…˜์ด ํฌํ•จ๋œ ์ž๋™์ฐจ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT 
    CAR_TYPE
    , COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS REGEXP '์—ด์„ ์‹œํŠธ|๊ฐ€์ฃฝ์‹œํŠธ|ํ†ตํ’์‹œํŠธ'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

REGEXP 

  • ์ •๊ทœ ํ‘œํ˜„์‹์„ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ํŒจํ„ด์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ํ™œ์šฉ
  • ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž๋ณด๋‹ค ๋ณต์žกํ•œ ๋ฌธ์ž์—ด ์กฐ๊ฑด ๊ฐ€๋Šฅ 

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด 

๊ธฐํ˜ธ ์„ค๋ช… ์˜ˆ์‹œ  
. ์ž„์˜์˜ ํ•œ ๋ฌธ์ž์™€ ์ผ์น˜ 'a.b' acb, a_b
^ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘์„ ์˜๋ฏธ '^hello' hello world, hello hi
$ ๋ฌธ์ž์—ด์˜ ๋์„ ์˜๋ฏธ 'world$' hello word, hi word
* ์•ž์˜ ๋ฌธ์ž๊ฐ€ 0๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋จ 'ab*c' ac, abc, abbc, abbbc
+ ์•ž์˜ ๋ฌธ์ž๊ฐ€ 1๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋จ 'ab+c' abc, abbc, ac (x)
? ์•ž์˜ ๋ฌธ์ž๊ฐ€ 0๋ฒˆ ๋˜๋Š” 1๋ฒˆ ๋‚˜ํƒ€๋‚จ 'colou?r' color, colour
[abc] 'a', 'b', 'c' ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜ '[abc]' apple, banna, cherry 
[a-z] ์†Œ๋ฌธ์ž ์•ŒํŒŒ๋ฒณ ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜    
[A-Z] ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜    
[0-9] ์ˆซ์ž ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜    
| OR ์—ฐ์‚ฐ์ž ์—ญํ•   'cat|dog' i have a cat, dog is good

 

์ž๋™์ฐจ ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„ ๊ตฌํ•˜๊ธฐ

SELECT 
    CAR_ID
    , ROUND(AVG(DATEDIFF(END_DATE, START_DATE) +1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC

 

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

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

 

์กฐ๊ฑด์— ๋งž๋Š” ์•„์ดํ…œ๋“ค์˜ ๊ฐ€๊ฒฉ์˜ ์ดํ•ฉ ๊ตฌํ•˜๊ธฐ

SELECT SUM(PRICE) AS TOTAL_PRICE
FROM ITEM_INFO
WHERE RARITY = 'LEGEND'

 

ROOT ์•„์ดํ…œ ๊ตฌํ•˜๊ธฐ

SELECT 
    I.ITEM_ID
    , I.ITEM_NAME
FROM ITEM_INFO AS I
    JOIN ITEM_TREE AS T
    ON I.ITEM_ID = T.ITEM_ID
WHERE PARENT_ITEM_ID IS NULL
ORDER BY ITEM_ID

 

์—…๊ทธ๋ ˆ์ด๋“œ ๋œ ์•„์ดํ…œ ๊ตฌํ•˜๊ธฐ

SELECT 
    ITEM_ID
    , ITEM_NAME
    , RARITY
FROM ITEM_INFO
WHERE ITEM_ID IN (SELECT T.ITEM_ID
                  FROM ITEM_INFO AS I
                        JOIN ITEM_TREE AS T
                        ON I.ITEM_ID = T.PARENT_ITEM_ID
                  WHERE RARITY = 'RARE')
ORDER BY ITEM_ID DESC

 

์กฐ๊ฑด์— ๋งž๋Š” ๊ฐœ๋ฐœ์ž ์ฐพ๊ธฐ

ํ’€์ด 1. ๊ฐ€์žฅ ์ •์„์ ์ธ ํ’€์ด ๋А๋‚Œ 
SELECT 
    ID
    , EMAIL
    , FIRST_NAME
    , LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (
                    SELECT SUM(CODE)
                    FROM SKILLCODES
                    WHERE NAME IN ('Python', 'C#'))
ORDER BY ID


ํ’€์ด 2. 
SELECT 
    DISTINCT(ID)
    , EMAIL
    , FIRST_NAME
    , LAST_NAME
FROM SKILLCODES AS S
    JOIN DEVELOPERS AS D
    ON S.CODE & D.SKILL_CODE
WHERE NAME = 'Python' OR NAME = 'C#'
ORDER BY ID

 

DISTINCT ํ•จ์ˆ˜ ์„ค๋ช…

  • ์ค‘๋ณต๋˜๋Š” ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋จ

๋น„ํŠธ ์—ฐ์‚ฐ์ž

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„ํŠธ ๋‹จ์œ„๋กœ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
 

๋น„ํŠธ ์—ฐ์‚ฐ์ž(bitwise operator), ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ๋กœ ์ดํ•ดํ•ด ๋ณด์ž.

๐Ÿ“Œ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ž€? SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•๋งŒ ๋ฐฐ์šด ์ƒํƒœ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๊ณ ๋“์  Kit๋ฅผ ํ’€๋˜ ์ค‘ ์ฒ˜์Œ ๋ณด๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ํ‰์†Œ &(AND)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ธฐํ˜ธ์ธ๋ฐ, SQL์—์„œ๋Š” AND ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๊ณ , '๋น„ํŠธ ์—ฐ

velog.io

 

์กฐ๊ฑด์— ๋งž๋Š” ์‚ฌ์› ์ •๋ณด ์กฐํšŒํ•˜๊ธฐ

SELECT 
    SUM(SCORE) AS SCORE
    , E.EMP_NO
    , EMP_NAME
    , POSITION
    , EMAIL
FROM HR_EMPLOYEES AS E
    JOIN HR_GRADE AS G
    ON E.EMP_NO = G.EMP_NO
GROUP BY G.EMP_NO
ORDER BY SCORE DESC
LIMIT 1

 

์—ฐ๋„ ๋ณ„ ํ‰๊ท  ๋ฏธ์„ธ๋จผ์ง€ ๋†๋„ ์กฐํšŒํ•˜๊ธฐ

SELECT 
    YEAR(YM) AS YEAR
    , ROUND(AVG(PM_VAL1), 2) AS PM10
    , ROUND(AVG(PM_VAL2), 2) AS 'PM2.5'
FROM AIR_POLLUTION
WHERE LOCATION2 = '์ˆ˜์›'
GROUP BY YEAR
ORDER BY YEAR

ํŠน์ˆ˜ ๋ฌธ์ž๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ!

  • pm2.5 -> 'pm2.5' : ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ฃผ๊ธฐ

 

๋…ธ์„ ๋ณ„ ํ‰๊ท  ์—ญ ์‚ฌ์ด ๊ฑฐ๋ฆฌ ์กฐํšŒํ•˜๊ธฐ

SELECT 
    ROUTE
    , CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE
    , CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY ROUTE DESC

CONCAT ํ•จ์ˆ˜

  • ์—ฌ๋Ÿฌ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

 

๋ฌผ๊ณ ๊ธฐ ์ข…๋ฅ˜ ๋ณ„ ์žก์€ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT 
    COUNT(*) AS FISH_COUNT
    , FISH_NAME
FROM FISH_INFO AS F
    JOIN FISH_NAME_INFO AS N
    ON F.FISH_TYPE = N.FISH_TYPE
GROUP BY FISH_NAME
ORDER BY FISH_COUNT DESC

 

์›”๋ณ„ ์žก์€ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT 
    COUNT(*) AS FISH_COUNT
    , MONTH(TIME) AS MONTH
FROM FISH_INFO
GROUP BY MONTH
ORDER BY MONTH

 

ํŠน์ • ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์žก์€ ์ด ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT 
    COUNT(*) AS FISH_COUNT
    
FROM FISH_INFO AS F
    JOIN FISH_NAME_INFO AS N
    ON F.FISH_TYPE = N.FISH_TYPE

WHERE FISH_NAME IN ('BASS', 'SNAPPER')

 

๋ถ„๊ธฐ๋ณ„ ๋ถ„ํ™”๋œ ๋Œ€์žฅ๊ท ์˜ ๊ฐœ์ฒด ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT 
    CONCAT(QUARTER(DIFFERENTIATION_DATE), 'Q') AS QUARTER
    , COUNT(*) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER
  • QUARTER : ๋ถ„๊ธฐ (1,2,3,4)๋กœ ์ถœ๋ ฅ 

 

์—ฐ๋„๋ณ„ ๋Œ€์žฅ๊ท  ํฌ๊ธฐ์˜ ํŽธ์ฐจ ๊ตฌํ•˜๊ธฐ 

ํ’€์ด 1. JOIN ํ™œ์šฉ
SELECT 
    YEAR(E.DIFFERENTIATION_DATE) AS YEAR
    , (MAX_SIZE - SIZE_OF_COLONY) AS YEAR_DEV
    , ID
FROM ECOLI_DATA AS E
    JOIN (
        SELECT 
            YEAR(DIFFERENTIATION_DATE) AS YEAR
            , MAX(SIZE_OF_COLONY) AS MAX_SIZE
        FROM ECOLI_DATA
        GROUP BY YEAR
        ) AS M
    ON M.YEAR = YEAR(E.DIFFERENTIATION_DATE)
ORDER BY YEAR, YEAR_DEV

ํ’€์ด 2. PARTITION ํ™œ์šฉ
SELECT
    YEAR(DIFFERENTIATION_DATE) AS YEAR
    , (MAX_SIZE - SIZE_OF_COLONY) AS YEAR_DEV
    , ID
FROM (
    SELECT 
        *
        , MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE)) AS MAX_SIZE
    FROM ECOLI_DATA
    ) AS M
ORDER BY YEAR, YEAR_DEV

๋ฐœ์ƒ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ - FROM ์ ˆ์˜ ๋ณ„์นญ : SQL ERROR (1248)

  • FROM ์ ˆ์— ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ณ„์นญ์€ ํ•„์ˆ˜์ž„
  • ์ด์œ  : SQL ์—”์ง„์ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์„ ์š”๊ตฌํ•จ = ๋ชจ๋“  ํŒŒ์ƒ ํ…Œ์ด๋ธ”์—๋Š” ๊ณ ์œ ํ•œ ๋ณ„์นญ์ด ์žˆ์–ด์•ผ ํ•จ 

> ๋”ฐ๋ผ์„œ ํ’€์ด 2์—์„œ From ์ ˆ์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ํ…Œ์ด๋ธ”์˜ ๋ณ„์นญ์„ ๋”ฐ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ 

 

๋ถ€๋ชจ์˜ ํ˜•์งˆ์„ ๋ชจ๋‘ ๊ฐ€์ง€๋Š” ๋Œ€์žฅ๊ท  ์ฐพ๊ธฐ

SELECT 
    B.ID
    , B.GENOTYPE 
    , A.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA AS A -- ๋ถ€๋ชจ
    JOIN ECOLI_DATA AS B -- ์ž์‹
    ON A.ID = B.PARENT_ID
-- ๋ถ€๋ชจ์™€ ๋‚˜์˜ GENOTYPE์„ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ ๋ถ€๋ชจ์˜ GENOTYPE๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง 
WHERE A.GENOTYPE & B.GENOTYPE = A.GENOTYPE 
ORDER BY ID

 


 

Lv. 3 ๋ฐ”๋กœ๊ฐ€๊ธฐ
 

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] MySQL Lv.3 ๋ฌธ์ œํ’€์ด ์ •๋‹ต ๋ชจ์Œ (feat. ์ฝ”๋”ฉํ…Œ์ŠคํŠธ)

๋ฌธ์ œ ํ’€์ด ๊ธฐ๊ฐ„ : 24๋…„ 12์›” 24์ผ ~ 26์ผ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋ฌธ์ œ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค ์—†์–ด์ง„ ๊ธฐ๋ก ์ฐพ๊ธฐSELECT O.ANIMAL_ID , O.NAMEFROM ANIMAL_OUTS AS O LEFT JOIN ANIMAL_INS AS I ON O.ANIMAL_ID = I.ANIMAL_IDWHERE I.ANIMAL_ID IS NULLORDER

thswldud.tistory.com

 

 

[MySQL] ๊ธฐ๋ณธ SQL ๋ฌธ๋ฒ• ์ด์ •๋ฆฌ & ๋ชจ์Œ

โœ”๏ธ ์ฃผ์˜ - SELECT ์ ˆ์—์„œ ์ƒ์„ฑํ•œ ๋ณ„์นญ์„ Where ์ ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ- Partition๊ณผ ๊ฐ™์€ ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” Where ์ ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ - ์„œ๋ธŒ์ฟผ๋ฆฌ ๋งŒ๋“ค๊ณ , ๋ณ„์นญ ์•ˆ ์‚ฌ์šฉํ•ด๋„ ๋งŒ๋“ค์–ด์•ผ ํ•จ   ๐Ÿ“ NULL ์ฒ˜

thswldud.tistory.com

Copy