๐ 1. ๋ฌธ์ ์ค๋ช

โ 2. ์คํจํ ์๋
SELECT
CASE
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,7) IN ('01', '02', '03') THEN '1Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,7) IN ('04', '05', '06') THEN '2Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,7) IN ('07', '08', '09') THEN '3Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,7) IN ('10', '11', '12') THEN '4Q'
END AS QUARTER,
COUNT(ID) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;
์ฒ์์๋ THEN 1 ์ ํ๊ณ CONCAT() ํจ์๋ก Q๋ฅผ ํฉ์น๋ ค๊ณ ํ๋๋ฐ ๊ทธ๋ฅ 1Q, 2Q, 3Q, 4Q ํ๋ฉด ๋จ
์ฝ๋๋ฅผ ๋ค ์ ๊ณ ๋์ GROUP BY ์ ์ ์ด๋ป๊ฒ ์จ์ค์ผ ํ ์ง๊ฐ ์ด๋ ค์ ๋ค.
ํ๋ฆฐ์ด์
์์ฑํ ์ฝ๋์ ์คํ๊ฒฐ๊ณผ์์ QUARTER์ null ๊ฐ์ด ๋ค์ด๊ฐ ๊ฑธ ๋ณด๋ SUBSTRING ์ด ์ ๋๋ก ์ฒ๋ฆฌ๊ฐ ์ ๋ ๊ฒ ๊ฐ๋ค.

๋ฌธ์ ์์ ๊ธฐ๋ํ๋ ๊ฒฐ๊ณผ ํ๋ฉดโผ

โญ 3. ์ ๋ต์ฝ๋
SELECT
CASE
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,2) IN ('01', '02', '03') THEN '1Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,2) IN ('04', '05', '06') THEN '2Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,2) IN ('07', '08', '09') THEN '3Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,2) IN ('10', '11', '12') THEN '4Q'
END AS QUARTER,
COUNT(ID) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;
์๋ชป๋๋ถ๋ถ
SUBSTRING(DIFFERENTIATION_DATE, 6,7)
์์ ํ์ฟผ๋ฆฌ
SUBSTRING(DIFFERENTIATION_DATE, 6,2)
6๋ฒ ์ธ๋ฑ์ค์์ 7๋ฒ ์ธ๋ฑ์ค๊น์ง ์๋ ค๋ด๋ ค๊ณ ํ๋๋ฐ 6,7์ 6๋ฒ ์ธ๋ฑ์ค ์์น๋ถํฐ 7๊ธ์๋ฅผ ์๋ฅด๊ฒ ๋ค๋ ๋ป์ด๋ค.
(6๋ฒ ์ธ๋ฑ์ค์์ 7๋ฒ ์ธ๋ฑ์ค๊น์ง ์๋ฅธ๋ค๋ ๋ป์ด ์๋ - ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํท๊ฐ๋ฆฌ์ง ๋ง๊ฒ)
SUBSTRING() ํจ์ ์ฌ์ฉ๋ฒ
SUBSTRING(string, start_position, length)
- string: ๋ฌธ์์ด ๋๋ ์ด ์ด๋ฆ (์ถ์ถ ๋์)
- start_position: ์ถ์ถ์ ์์ํ ์์น (1๋ถํฐ ์์)
- length: ์ถ์ถํ ๋ฌธ์์ ๊ธธ์ด
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ธฐ
DATE_FORMAT()
SELECT CASE
WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m') IN ('01', '02', '03') THEN '1Q'
WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m') IN ('04', '05', '06') THEN '2Q'
WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m') IN ('07', '08', '09') THEN '3Q'
WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m') IN ('10', '11', '12') THEN '4Q'
END AS QUARTER,
COUNT(ID) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;
๐ค๊ถ๊ธํ ์
"GROUP BY ์ ์ SELECT ์ ๋ณด๋ค ๋จผ์ ์ํ๋๋๋ฐ ์ด๋ป๊ฒ ๋ณ์นญ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฐ?"
๐ SQL ์ฟผ๋ฆฌ ์คํ ์์

๋ด๊ฐ GROUP BY ์ ์ ๋ณ์นญ์ธ `QUARTER` ์ ์ผ๋๋ฐ ์ฝ๋๊ฐ ํ๋ก๊ทธ๋๋จธ์ค ์ฝ์์์ ๋์๊ฐ๋ค.
๋ณ์นญ์ ๋ถ์ฌํ SELECT ์ ์ด GROUP BY ์ ๋ณด๋ค ๋ฆ๊ฒ ์คํ๋๋๋ฐ ์ด๋ป๊ฒ ORDER BY ์ ์ ๋ณ์นญ์ ์จ๋ ์ฝ๋๊ฐ ๋์๊ฐ๋์ง ์ ๊ธฐํ๋ค.
์๋๋ ์๋์ฒ๋ผ ์จ์ผ ํ๋๊ฑฐ ์๋๊ฐ?
SELECT
CASE
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('01', '02', '03') THEN '1Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('04', '05', '06') THEN '2Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('07', '08', '09') THEN '3Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('10', '11', '12') THEN '4Q'
ELSE 'UNKNOWN'
END AS QUARTER,
COUNT(ID) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY
CASE
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('01', '02', '03') THEN '1Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('04', '05', '06') THEN '2Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('07', '08', '09') THEN '3Q'
WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('10', '11', '12') THEN '4Q'
ELSE 'UNKNOWN'
END
ORDER BY QUARTER;
๊ฒ์ ๊ฒฐ๊ณผ

'Algorithm > SQLํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ 1. ๋ฌธ์ ์ค๋ช

โ 2. ์คํจํ ์๋
SELECT CASE WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,7) IN ('01', '02', '03') THEN '1Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,7) IN ('04', '05', '06') THEN '2Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,7) IN ('07', '08', '09') THEN '3Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,7) IN ('10', '11', '12') THEN '4Q' END AS QUARTER, COUNT(ID) AS ECOLI_COUNT FROM ECOLI_DATA GROUP BY QUARTER ORDER BY QUARTER;
์ฒ์์๋ THEN 1 ์ ํ๊ณ CONCAT() ํจ์๋ก Q๋ฅผ ํฉ์น๋ ค๊ณ ํ๋๋ฐ ๊ทธ๋ฅ 1Q, 2Q, 3Q, 4Q ํ๋ฉด ๋จ
์ฝ๋๋ฅผ ๋ค ์ ๊ณ ๋์ GROUP BY ์ ์ ์ด๋ป๊ฒ ์จ์ค์ผ ํ ์ง๊ฐ ์ด๋ ค์ ๋ค.
ํ๋ฆฐ์ด์
์์ฑํ ์ฝ๋์ ์คํ๊ฒฐ๊ณผ์์ QUARTER์ null ๊ฐ์ด ๋ค์ด๊ฐ ๊ฑธ ๋ณด๋ SUBSTRING ์ด ์ ๋๋ก ์ฒ๋ฆฌ๊ฐ ์ ๋ ๊ฒ ๊ฐ๋ค.

๋ฌธ์ ์์ ๊ธฐ๋ํ๋ ๊ฒฐ๊ณผ ํ๋ฉดโผ

โญ 3. ์ ๋ต์ฝ๋
SELECT CASE WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,2) IN ('01', '02', '03') THEN '1Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,2) IN ('04', '05', '06') THEN '2Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,2) IN ('07', '08', '09') THEN '3Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6,2) IN ('10', '11', '12') THEN '4Q' END AS QUARTER, COUNT(ID) AS ECOLI_COUNT FROM ECOLI_DATA GROUP BY QUARTER ORDER BY QUARTER;
์๋ชป๋๋ถ๋ถ
SUBSTRING(DIFFERENTIATION_DATE, 6,7)
์์ ํ์ฟผ๋ฆฌ
SUBSTRING(DIFFERENTIATION_DATE, 6,2)
6๋ฒ ์ธ๋ฑ์ค์์ 7๋ฒ ์ธ๋ฑ์ค๊น์ง ์๋ ค๋ด๋ ค๊ณ ํ๋๋ฐ 6,7์ 6๋ฒ ์ธ๋ฑ์ค ์์น๋ถํฐ 7๊ธ์๋ฅผ ์๋ฅด๊ฒ ๋ค๋ ๋ป์ด๋ค.
(6๋ฒ ์ธ๋ฑ์ค์์ 7๋ฒ ์ธ๋ฑ์ค๊น์ง ์๋ฅธ๋ค๋ ๋ป์ด ์๋ - ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํท๊ฐ๋ฆฌ์ง ๋ง๊ฒ)
SUBSTRING() ํจ์ ์ฌ์ฉ๋ฒ
SUBSTRING(string, start_position, length)
- string: ๋ฌธ์์ด ๋๋ ์ด ์ด๋ฆ (์ถ์ถ ๋์)
- start_position: ์ถ์ถ์ ์์ํ ์์น (1๋ถํฐ ์์)
- length: ์ถ์ถํ ๋ฌธ์์ ๊ธธ์ด
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ธฐ
DATE_FORMAT()
SELECT CASE WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m') IN ('01', '02', '03') THEN '1Q' WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m') IN ('04', '05', '06') THEN '2Q' WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m') IN ('07', '08', '09') THEN '3Q' WHEN DATE_FORMAT(DIFFERENTIATION_DATE,'%m') IN ('10', '11', '12') THEN '4Q' END AS QUARTER, COUNT(ID) AS ECOLI_COUNT FROM ECOLI_DATA GROUP BY QUARTER ORDER BY QUARTER;
๐ค๊ถ๊ธํ ์
"GROUP BY ์ ์ SELECT ์ ๋ณด๋ค ๋จผ์ ์ํ๋๋๋ฐ ์ด๋ป๊ฒ ๋ณ์นญ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฐ?"
๐ SQL ์ฟผ๋ฆฌ ์คํ ์์

๋ด๊ฐ GROUP BY ์ ์ ๋ณ์นญ์ธ QUARTER
์ ์ผ๋๋ฐ ์ฝ๋๊ฐ ํ๋ก๊ทธ๋๋จธ์ค ์ฝ์์์ ๋์๊ฐ๋ค.
๋ณ์นญ์ ๋ถ์ฌํ SELECT ์ ์ด GROUP BY ์ ๋ณด๋ค ๋ฆ๊ฒ ์คํ๋๋๋ฐ ์ด๋ป๊ฒ ORDER BY ์ ์ ๋ณ์นญ์ ์จ๋ ์ฝ๋๊ฐ ๋์๊ฐ๋์ง ์ ๊ธฐํ๋ค.
์๋๋ ์๋์ฒ๋ผ ์จ์ผ ํ๋๊ฑฐ ์๋๊ฐ?
SELECT CASE WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('01', '02', '03') THEN '1Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('04', '05', '06') THEN '2Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('07', '08', '09') THEN '3Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('10', '11', '12') THEN '4Q' ELSE 'UNKNOWN' END AS QUARTER, COUNT(ID) AS ECOLI_COUNT FROM ECOLI_DATA GROUP BY CASE WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('01', '02', '03') THEN '1Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('04', '05', '06') THEN '2Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('07', '08', '09') THEN '3Q' WHEN SUBSTRING(DIFFERENTIATION_DATE, 6, 2) IN ('10', '11', '12') THEN '4Q' ELSE 'UNKNOWN' END ORDER BY QUARTER;
๊ฒ์ ๊ฒฐ๊ณผ
