๐Ÿ’ก (MySQL) WITH

๋ฐ•ํ˜„์•„ยท2024๋…„ 10์›” 30์ผ
0

๊ธฐ์ดˆ

๋ชฉ๋ก ๋ณด๊ธฐ
24/31

๐Ÿ’ก WITH

WITH ์ ˆ์€ CTE(Common Table Expression)๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Š” ์ฟผ๋ฆฌ ๋‚ด์—์„œ ์ผ์‹œ์ ์ธ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์ƒ์„ฑํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ๋ฐ˜๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•˜๋„๋ก ํ•œ๋‹ค. WITH ๊ตฌ๋ฌธ์€ ํŠนํžˆ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋‚˜ ์—ฌ๋Ÿฌ ๋ฒˆ ์ค‘์ฒฉ๋œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

์˜ˆ์‹œ

ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ๋งค์ถœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ, WITH ์ ˆ์„ ์‚ฌ์šฉํ•ด ๋งค์ถœ ์ •๋ณด๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

WITH sales_summary AS (
    SELECT
        product_id,
        SUM(sales_amount) AS total_sales,
        COUNT(*) AS sales_count
    FROM
        sales
    WHERE
        sales_date BETWEEN '2023-01-01' AND '2023-12-31'
    GROUP BY
        product_id
)

SELECT
    p.product_name,
    ss.total_sales,
    ss.sales_count
FROM
    products p
JOIN
    sales_summary ss ON p.product_id = ss.product_id
ORDER BY
    ss.total_sales DESC;

์œ„ ์˜ˆ์‹œ์—์„œ sales_summary๋Š” WITH ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ์ž„์‹œ ํ…Œ์ด๋ธ”์ด๋‹ค. ์ด ์ž„์‹œ ํ…Œ์ด๋ธ”์—๋Š” ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ๋งค์ถœ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ดํ›„ products ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜์—ฌ ๊ฐ ์ œํ’ˆ์˜ ๋งค์ถœ ์š”์•ฝ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€