๐VELOG๋ฅผ ์์ํ๋ฉฐ
๋ง์นจ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ํ๋ ํ์๋ถ์ ์ถ์ฒ ๋์ VELOG๋ก ๋์ด์๋ค.
์ผ๋ง๋ ๊พธ์คํ ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ผ๋จ ์จ๋ณด๋ ์ค์ด๋ค.
๋ด๊ฐ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ (๋๋ถ๋ถ) ๋ค๋ฅธ ์ฌ๋๋ค๋ ํท๊ฐ๋ คํ๋
๋ ๋ฟ๋ง์๋๋ผ ๋ค๋ฅธ ์ฌ๋๋ ๋์์ ๋ฐ์ผ๋ฉด ์ข๊ฒ ๋ค.
MySQL ๊ธฐ์ด ์๊ธฐ
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ๋งํฌ๐ ๋งํฌํ ์คํธ
์์ง ์๋นํ ์ชผ๋ ์ด๋ค.๐
SELECT A1.NAME
FROM ANIMAL_INS A1
WHERE A1.DATETIME=(SELECT MIN(A2.DATETIME)
FROM ANIMAL_INS A2);
๋ณดํธ์์ ๋ค์ด์จ์ง ๊ฐ์ฅ ์ค๋๋ ๋๋ฌผ์ ์ด๋ฆ์ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ผํ๋ ๊ฒ ๊ฐ๋ค.
๋ ์ง๊ฐ ๊ฐ์ฅ ์ค๋๋์๋ค๋ ๊ฑด
๋ณดํธ์์ ๋ค์ด์จ ๋ ์ ํ์ํ๋ ์ปฌ๋ผ์ธ
DATETIME ์ด ๊ฐ์ฅ ์์ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
์ง๊ณํจ์๋ SELECT ๋ HAVING ๋ค์๋ง ๊ฐ๋ฅํ๋ค๊ณ ์๊ณ ์๋๋ฐ,
์ด ์ฟผ๋ฆฌ์์ ์กฐํํด์ผ ํ๋ ๊ฒ(SELECT ๋ค์ ์ค๋ ๊ฒ)์
NAME ์ปฌ๋ผ์ด๊ธฐ ๋๋ฌธ์ WHERE ์ ์ ์กฐ๊ฑด์ ๊ฑธ์ด์ค๋ค
์ด ๋ ์กฐํํด์ผ ํ๋ ์ปฌ๋ผ๊ณผ ๊ณ์ฐํ๋ ์ปฌ๋ผ์
๊ฐ์ ํ
์ด๋ธ์ ์๋ ์ปฌ๋ผ์ด์ง๋ง ์ด๋ฆ์ ๋ถ์ฌํด a1, a2๋ก ๋ถ๋ฆฌํ๊ณ ,
์ปฌ๋ผ ์์ a1.(์ปฌ๋ผ๋ช
) a2.(์ปฌ๋ผ๋ช
) ์ด๋ฐ์์ผ๋ก ๊ตฌ๋ถํด์ค๋ค.
SELECT NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL -- ์ด๋ฆ ์๋ ๋๋ฌผ ์ ์ธ
GROUP BY NAME -- ์ด๋ฆ๋ณ๋ก ์นด์ดํธํ๋๋ฐ,
HAVING COUNT(*) >= 2 -- ๋๋ฒ์ด์ ์ฐ์ฌ์ผ ํ๋ค
ORDER BY NAME; -- ๊ฒฐ๊ณผ ์ ๋ ฌ
์ฟผ๋ฆฌ ์กฐ๊ฑด์ผ๋ก ์ ์๋๋ ๋ฌธํญ๋ค๊ณผ ์ฝ๋๋ฅผ ๋งค์นญ์์ผ๋ณด์๋ค.
์ด ๋ฌธ์ ๋ ์ด๋ฆ์๋ ๋๋ฌผ์ ์ ์ธํ๊ณ ,
๋์ผํ ์ด๋ฆ์ด ๋ ๋ง๋ฆฌ ์ด์์ ๋๋ฌผ์๊ฒ ์ฌ์ฉ๋ ๊ฒฝ์ฐ
๊ทธ ์ด๋ฆ๊ณผ ์ฌ์ฉ๋ ํ์๋ฅผ ์นด์ดํธํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผํ๋ค.
์ด๋ฆ๋ณ๋ก ์นด์ดํธํด์ผํ๊ธฐ ๋๋ฌธ์
GROUP BY ๋ฅผ ์ฌ์ฉํด์ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ์ ํด์ค๋ค.
๊ทผ๋ฐ ์ด๋ฆ๋ณ๋ก ๊ทธ๋ฃน์ ๋๋ ํ์ ํ์ ๊ฐ์๋ฅผ ์นด์ดํธ ํ์ ๋
2 ์ด์์ธ ์ด๋ฆ๋ง ๊ฐ์ ธ์์ผ ํ๊ธฐ์,
HAVING ์ ์ ์กฐ๊ฑด์ ์
๋ ฅํด์ค๋ค.
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19 -- ์๊ฐ๋ ์ค์
GROUP BY 1
ORDER BY 1; -- ์๊ฐ๋ ์ค๋ฆ์ฐจ์
์ด ์ฟผ๋ฆฌ๋ ์
์๊ฐ ๋๋ฌผ๋ค์ด ์ฃผ๋ก ์ด๋ ์๊ฐ๋์ ์
์๊ฐ๋์ง ์์๋ณด๊ธฐ ์ํด
๊ทธ ์๊ฐ๋์ ์
์๊ฐ ๋๋ฌผ ์๋ฅผ ์กฐํํ๊ธฐ ์ํ ์ฟผ๋ฆฌ์ด๋ค.
์ฒ์์๋ SUBSTR ํจ์๋ฅผ ์ด์ฉํด์ ์๊ฐ๋๋ฅผ ์ถ์ถํด์ผํ๋ ์ฝ๊ฐ ๊ณ ๋ฏผํ์ผ๋,
HOUR ํจ์๋ผ๋ ํธํ ๊ธฐ๋ฅ์ ์๊ณ ์์๋ค๋ ๊ฑธ ๊นจ๋ฌ์๋ค.
DATETIME ์ปฌ๋ผ์ HOUR ํจ์๋ฅผ ์ ์ฉํด ์๊ฐ๋๋ฅผ ์ถ์ถํ๊ณ
์๊ฐ๋๋ฅผ ๊ธฐ์ค์ผ๋ก GROUP BY ํ์ฌ ๊ทธ๋ฃนํ ํด์ค๋ค.
(์ด ๋ 1์ SELECT ์ ์ ์ฒซ๋ฒ์งธ ์ปฌ๋ผ์ธ HOUR(DATETIME)์ ๊ฐ๋ฆฌํจ๋ค.)
์ ๋ ฌ์์ ์ญ์ ์๊ฐ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.
์ด์ํ๊ฒ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๋ง ํ๋ฉด
์๊พธ ์ฑ๊ธํ๊ฒ ๋ต์์ ์ ์ถํ๊ฒ ๋๋๋ฐ...๐ฅ
๊ทธ๋ฌ๋ฉด์ 9์๋ถํฐ 19์ ์๊ฐ๋๋ง ์ถ์ถํ๋ผ๋ ์กฐ๊ฑด์ ์์๋ค.
SELECT ANIMAL_TYPE,
(CASE WHEN NAME IS NULL THEN 'No name' ELSE NAME END)
, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
์ด ์ฟผ๋ฆฌ๋ ๋๋ฌผ์ด๋ฆ ๋๊ฐ์ฒ๋ฆฌ๊ฐ ์ค์ํ๋ค.
CASE๋ฌธ์ ํ์ฉํด์ NAME ์ด NULL๊ฐ์ด๋ฉด 'No name'์ ์ถ๋ ฅํ๋๋ก ํ๋ค.
CASE๋ฌธ์ ํํ๋ ์๋์ ๊ฐ๋ค.
CASE WHEN (์กฐ๊ฑด) THEN (๊ฒฐ๊ณผ1) ELSE (๊ฒฐ๊ณผ2) END;
๋ญ๊ฐ ๋จ์ํ ์๊ฐํ๋ฉด,
์ด๋ฐ ์์ ์ปดํจํฐ ์
์ฅ์ ๊ณ ๋ คํ์ง ์๋ ์๊ฐ์ ์ ๊น ํ์ผ๋...
ELSE ๋ค์๋ ์ถ๋ ฅํด์ค ์ปฌ๋ผ์ ์
๋ ฅํด์ค์ผ ํ๋ค.
์ปดํจํฐ์ ์ฌ๊ณ ๋ฐฉ์์ ๋ฐฐ๋ คํด์ฃผ๋ฉฐ ๋ฌธ์ ๋ฅผ ํ์.๐
SELECT ANIMAL_ID, NAME,
(CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' THEN 'O'
WHEN SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
ELSE 'X' END) AS ์ค์ฑํ
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
์ด ์ฟผ๋ฆฌ๋ ์ค์ฑํ ์ฌ๋ถ๋ฅผ O, X๋ก ๊ตฌ๋ถํ๋ '์ค์ฑํ'๋ผ๋ ์ปฌ๋ผ์ ๋ง๋ค์ด์ค๋ค.
์ฒ์์ ๋ด๊ฐ ์งฐ๋ ์ฟผ๋ฆฌ๋
CASE WHEN SEX_UPON_INTAKE LIKE IN('%Neutered%','%Spayed%') THEN 'O'
์ด๋ฐ ๋ชจ์์ ์์๋ค.
ํ์ง๋ง ์ ์ถํ๋ Operand should contain 1 column(s) ์ค๋ฅ๊ฐ ๋จ๋๋ผ.
๊ทธ๋์ ๊ตฌ๊ธ๋งํด๋ณด์๋๋ฐ,
๋ฌด์จ ๋ป์ธ์ง ์ ํํ๋ ์ดํดํ์ง ๋ชปํ์ผ๋...
๋ญ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ผ๋จ ์ค๋ฅ๊ฐ ๋๋๊น
ํ๋ผ๋ ๋๋ก WHEN ์ ๋ ๊ฐ๋ก ๋๋ ์ฃผ์๋ค.