ORDER BY CASE๋ SQL Query์์ ๋ณต์กํ ์ ๋ ฌ ๋ก์ง์ ๊ตฌํํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค. ๋ง์น ๋์๊ด์์ ์ฑ ์ 1) ๋์ถ ๋น๋ 2) ์ถํ์ผ์ 3) ์ ์ ์ด๋ฆ ์์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ฒ๋ผ, ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฐ๋ฅธ ์ฐ์ ์์ ๊ธฐ๋ฐ ์ ๋ ฌ์ ๊ตฌํํ ์ ์๋ค.
๊ธฐ๋ณธ ๋์ ๋ฐฉ์
flowchart TB A[SQL Query ์คํ] --> B[CASE ์กฐ๊ฑด ํ๊ฐ] B --> C[์ ๋ ฌ ์ฐ์ ์์ ํ ๋น] C --> D[๋ฐ์ดํฐ ์ ๋ ฌ] D --> E[๊ฒฐ๊ณผ ๋ฐํ] subgraph "CASE ์กฐ๊ฑด ํ๊ฐ" B1[์กฐ๊ฑด1 ๊ฒ์ฌ] --> B2[์กฐ๊ฑด2 ๊ฒ์ฌ] B2 --> B3[์กฐ๊ฑดN ๊ฒ์ฌ] end
๊ตฌํ
-- ์์ ๋ฅผ ์ํ ํ
์ด๋ธ ์์ฑ
CREATE TABLE orders (
id INT PRIMARY KEY,
status VARCHAR(20),
priority INT,
created_at TIMESTAMP
);
-- ์ธ๋ฑ์ค ์์ฑ (์ฑ๋ฅ ์ต์ ํ)
CREATE INDEX idx_status_priority ON orders(status, priority);๋จ๊ณ๋ณ ๊ตฌํ
1. ๊ธฐ๋ณธ ๊ตฌํ
-- ๊ธฐ๋ณธ์ ์ธ ORDER BY CASE ๊ตฌํ
-- ์ฃผ๋ฌธ ์ํ์ ๋ฐ๋ฅธ ์ฐ์ ์์ ์ ๋ ฌ
SELECT
id,
status,
priority
FROM orders
ORDER BY
CASE status
WHEN 'URGENT' THEN 1 -- ๊ธด๊ธ ์ฃผ๋ฌธ ์ต์ฐ์
WHEN 'PENDING' THEN 2 -- ๋๊ธฐ ์ฃผ๋ฌธ ๋ค์
WHEN 'PROCESSING' THEN 3 -- ์ฒ๋ฆฌ์ค ์ฃผ๋ฌธ
ELSE 4 -- ๊ธฐํ ์ํ
END;2. ๋ณตํฉ ์กฐ๊ฑด ๊ตฌํ
-- ์ํ์ ์ฐ์ ์์๋ฅผ ๊ฒฐํฉํ ์ ๋ ฌ
SELECT
id,
status,
priority,
created_at
FROM orders
ORDER BY
CASE
WHEN status = 'URGENT' AND priority > 5 THEN 1
WHEN status = 'URGENT' THEN 2
WHEN status = 'PENDING' AND priority > 5 THEN 3
WHEN status = 'PENDING' THEN 4
ELSE 5
END,
created_at DESC; -- ๋์ผ ์ฐ์ ์์ ๋ด์์๋ ์ต์ ์Best Practices
์ฑ๋ฅ ์ต์ ํ
-- ์๋ชป๋ ์์: ํจ์ ํธ์ถ์ ํฌํจํ CASE
SELECT *
FROM orders
ORDER BY
CASE
WHEN DATEDIFF(NOW(), created_at) > 30 THEN 1
ELSE 2
END;
-- ์ฌ๋ฐ๋ฅธ ์์: ๊ณ์ฐ์ ๋ฏธ๋ฆฌ ์ํ
WITH order_ages AS (
SELECT
*,
DATEDIFF(NOW(), created_at) as age_days
FROM orders
)
SELECT *
FROM order_ages
ORDER BY
CASE
WHEN age_days > 30 THEN 1
ELSE 2
END;์์คํ ์ํคํ ์ฒ
graph TD A[Query Parser] --> B[Execution Plan Generator] B --> C[CASE Expression Evaluator] C --> D[Sort Operation] D --> E[Result Set] subgraph "Sort Operation" D1[์์ ์ ๋ ฌ ํค ์์ฑ] D2[๋ฉ๋ชจ๋ฆฌ ์ ๋ ฌ] D3[๋์คํฌ ์ ๋ ฌ] end
์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ
-
์ธ๋ฑ์ค ํ์ฉ
- CASE ๋ฌธ ๋ด๋ถ ์กฐ๊ฑด์ด ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ ์๋๋ก ์ค๊ณํ๋ค
- ๋ณตํฉ ์ธ๋ฑ์ค ์์ฑ ์ ์์ฃผ ์ฌ์ฉ๋๋ ์ ๋ ฌ ์กฐ๊ฑด์ ์ฐ์ ํ๋ค
-
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
- ๋์ฉ๋ ๋ฐ์ดํฐ ์ ๋ ฌ ์ ์์ ํ ์ด๋ธ ์ฌ์ฉ์ ๊ณ ๋ คํ๋ค
- ORDER BY ์ ์ ๋ณต์ก๋๊ฐ ๋์์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ค