WITH RECURSIVE
π
νλ‘κ·Έλλ¨Έμ€ 59413 λ² λ¬Έμ λ₯Ό νλ€κ° 0μλΆν° 23μκΉμ§μ λͺ¨λ μκ°μ λν COUNT λ₯Ό ν΄μΌ νλ κ²½μ°κ° μκ²Όλ€. μΈμ΄λ‘ κ·Έκ±Έ ꡬννλ κ²μ λ¨μ for() λ₯Ό μ¬μ©ν΄μ μ²λ¦¬νλ λ±μ λ€μν λ°©λ²μ΄ μμ§λ§ SQL μμλ μ΄λ ν λ°©λ²μΌλ‘ ꡬνμ ν΄μΌ ν μ§ λ§λ§νλ€. UNION μΌλ‘ ν΄κ²°ν μλ μμ§λ§ μμ μ½λ? κ° μλ κ² κ°μ λ€μν νμ΄λ₯Ό μ°Ύμλ³΄λ€ with recursive λΌλ κΈ°λ₯μ μ°Ύκ² λμλ€. μΆνμλ μ μ©νκ² μ¬μ©ν μ μμ κ² κ°μ μ 리νκ³ λμ΄κ°κ³ μ μ΄ κΈμ μμ±νλ€.
π WITH RECURSIVE
MySQLμμ μ 곡νλ WITH RECURSIVE ꡬ문μ λ§ κ·Έλλ‘ μ¬κ·ν¨μμ²λΌ λμνλ€.
WITH RECURSIVE μμ±ν _λ·°_μ΄λ¦ AS
(
μ΄κΈ°_SQL
UNION ALL
λ°λ³΅ν _SQL_λ°λ³΅μ_λ©μΆ_WHEREμ _ν¬ν¨
)
ꡬμ±μ μμ κ°λ€. μ΄λ κ² λ¬Έλ²λ§ 보기μλ μ΄ν΄κ° μ΄λ €μ°λ λͺκ°μ§ μμλ₯Ό ν΅ν΄ μ¬μ©λ²μ λν΄ μμ보μ
β μ¬μ©λ²
----------------
| col1 | col2 |
----------------
| 1 | 2 |
| 3 | 4 |
----------------
μμ κ°μ κ²°κ³Όκ° λμ€κ² WITH RECURSIVE λ₯Ό μ¬μ©ν΄λ³΄μ
WITH cte (col1, col2) AS
(
SELECT 1, 2
UNION ALL
SELECT 3, 4
)
SELECT col1, col2 FROM cte;
μμ ν
μ΄λΈλͺ
(컬λΌ, ..) AS λ‘ μ§μ ν΄μ€λ€.
WITH cte AS
(
SELECT 1 AS col1, 2 AS col2
UNION ALL
SELECT 3, 4
)
SELECT col1, col2 FROM cte;
AS λ‘ μ§μ 컬λΌμ μ§μ ν΄μ€λ λλ€.
κ·Έλ λ€λ©΄ 0 ~ 23 κΉμ§λ₯Ό λνλ΄λ €λ©΄ μ΄λ»κ² μ¬μ©νλ©΄ λ κΉ ?
WITH RECURSIVE cte (HOUR) AS
(
SELECT 0
UNION ALL
SELECT HOUR + 1 FROM cte WHERE HOUR < 23
)
μμμμ SQL μ²λΌ HOUR μ΄λΌλ 컬λΌμ μ§μ ν΄μ£Όκ³ HOUR μ΄ 23λ³΄λ€ μμ λκΉμ§ μ¬κ· νΈμΆμ ν΄μ€λ€κ³ μκ°νλ©΄ λλ€.
κ°λ¨ν μ¬μ©λ²κΉμ§ μμλ΄€μΌλ ν΄κ²°νμ§ λͺ»νλ νλ‘κ·Έλλ¨Έμ€μ λ¬Έμ λ₯Ό νμ΄ν΄λ³΄μ.
π νλ‘κ·Έλλ¨Έμ€, 59413
https://school.programmers.co.kr/learn/courses/30/lessons/59413
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ
맀μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ
λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
μꡬμ¬ν
: ANIMAL_OUTS ν
μ΄λΈμμ μκ° λ³ μ
μ 건μ μΆλ ₯.
νμ΄
WITH RECURSIVE T (HOUR) AS
(
SELECT 0
UNION ALL
SELECT HOUR + 1 FROM T WHERE HOUR < 23
)
0 ~ 23κΉμ§μ μκ°μ λνλΌ μ μλ μμ ν
μ΄λΈ, Tλ₯Ό μμ±νλ€.
WITH RECURSIVE T (HOUR) AS
(
SELECT 0
UNION ALL
SELECT HOUR + 1 FROM T WHERE HOUR < 23
)
SELECT t.HOUR AS HOUR, COUNT(a.ANIMAL_ID) AS COUNT
FROM T t
LEFT JOIN ANIMAL_OUTS a
ON t.HOUR = HOUR(a.DATETIME)
GROUP BY HOUR
ORDER BY HOUR ASC
νλνλ νμ΄ν΄λ³΄μ. COUNT λ₯Ό ν΄μΌ νλ€. κΈ°μ€μ΄ λλ T ν
μ΄λΈ λ§κ³ ANIMAL_OUTS μ 컬λΌμ΄ μλ κ²½μ°λ μκΈ° λλ¬Έμ INNER JOIN μ΄ μλ LEFT JOIN μ ν΄μΌ νλ€. (COUNT = 0 μ κ²½μ°) κ·Έλ κΈ° λλ¬Έμ COUNT μ κΈ°μ€μ ANIMAL_OUTS ν
μ΄λΈμ ANIMAL_IDλ‘ μ‘μ쀬λ€. λ§μ§λ§μΌλ‘ μ λ ¬λ§ ν΄μ£Όλ©΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.