header-img
Info :
๋ฐ€๋„
denseยน
์žฅ๋ž˜ํฌ๋ง : ๋‹จ์œ„ ๋ถ€ํ”ผ ๋‹น ์งˆ๋Ÿ‰์ด ๋ณด๋‹ค ๋นฝ๋นฝํ•œ ์‚ฌ๋žŒ ๋˜๊ธฐ

 

 

 

 

CASE WHEN(CASE ๋ฌธ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.)์€ SQL์˜ ์กฐ๊ฑด๋ฌธ์ด๋‹ค. ๊ธฐ์ค€ ์ปฌ๋Ÿผ A๊ฐ€ B๋ผ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด C๋ผ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ˜•ํƒœ๋กœ 'CASE WHEN A = B THEN C'์™€ ๊ฐ™์ด ํ‘œํ˜„๋œ๋‹ค. "์กฐ๊ฑด์— ๋งž๋Š” ๋‹ต์„ ์ถœ๋ ฅ"ํ•˜๋Š” ์‹์ด์–ด์„œ ์ฃผ๋กœ SELECT ์ ˆ์ด๋‚˜ ์ง‘๊ณ„ํ•จ์ˆ˜์—์„œ ์“ฐ์ธ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์•„์ง ์ง‘๊ณ„๋˜์ง€ ์•Š์€ ์œ ์˜๋ฏธํ•œ ์ง€ํ‘œ๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•ด ๋ณด๊ณ  ์ด๋ฅผ ํ†ตํ•ด CASE WHEN์˜ SELECT์ ˆ ์šฉ๋ก€๋ฅผ ์‚ดํŽด๋ณด๋ ค ํ•œ๋‹ค.

 

 

 

์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

 

์•„๋ž˜๋กœ ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋‹ค. (mySQL์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ƒ˜ํ”Œ์ด๋‹ค.) ์šฐ๋ฆฌ๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๋“ค์„ ์‚ดํŽด๋ณด๊ณ  CASE WHEN์„ ํ†ตํ•ด ํšŒ์‚ฌ ์šด์˜ ์ „๋ฐ˜์— ์œ ์˜๋ฏธํ•œ ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ด๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์—ฌ๋Ÿ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค. customers, employees, offices, orderdetails, orders, payments, productline, products...... ์ด ํšŒ์‚ฌ์—์„œ ๋ฌด์Šจ ์ผ์„ ํ•˜๋Š”์ง€๋Š” ์•„์ง ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ํ”„๋กœ๋•ํŠธ ์ •๋ณด, ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๊ฒƒ์œผ๋กœ ๋ณด์•„ ์–ด๋–ค ํ”„๋กœ๋•ํŠธ๋ฅผ ํŒ๋งคํ•˜๋Š” ์ปค๋จธ์Šค์ž„์„ ์šฐ์„  ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๊ฒŒ ์œ ํ˜•์˜ ์ œํ’ˆ์ด๋“ , ๋ฌดํ˜•์˜ ์ œํ’ˆ์ด๋“ ๊ฐ„์—. ์šฐ์„  products๋ฅผ ํ•œ ๋ฒˆ ๋ณผ๊นŒ.

 

 

 

 

 

 

 

์œ„ ์‚ฌ์ง„์€ products์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ถ€ ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๋‹ค. ์ต์ˆ™ํ•œ ์ž๋™์ฐจ/ ์˜คํ† ๋ฐ”์ด ๋ธŒ๋žœ๋“œ๊ฐ€ ๋ณด์ด๋Š”๋ฐ, ์ „๋ฐ˜์ ์œผ๋กœ ์—„์ฒญ ์˜›๋‚  ๊ฒƒ์ด๊ณ (productName) ์žฌ๊ณ  ์ˆ˜๋Ÿ‰๋„ ๋„ˆ๋ฌด ๋งŽ๋‹ค. ์ข€ ๋” ์‚ดํŽด ๋ณด๋‹ˆ productScale์ด๋ผ๋Š” ์ปฌ๋Ÿผ์ด ์žˆ๋‹ค. 1:10, 1:12...... ์ž๋™์ฐจ ๋ฏธ๋‹ˆ์–ด์ฒ˜๋ฅผ ํŒŒ๋Š” ํšŒ์‚ฌ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ œ์กฐ ๋ฒค๋”์‚ฌ(productVender)๊ฐ€ ์—ฌ๋Ÿฟ์ธ ๊ฒƒ์œผ๋กœ ๋ด์„  ์ œ์กฐ์‚ฌ๋ณด๋‹ค๋Š” ์œ ํ†ต์‚ฌ์— ๊ฐ€๊นŒ์šด ํšŒ์‚ฌ๊ฒ ๋‹ค.

 

์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์ฃผ๋กœ ๋’ค์— ์žˆ๋‹ค. ์žฌ๊ณ  ์ˆ˜๋Ÿ‰(quantityInstock), ๊ตฌ๋งค์›๊ฐ€(buyPrice), ํŒ๋งค๊ฐ€(MSRP). ํŒ๋งค ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๋ณด๋ฉด ๋œฏ์–ด๋ณผ ๋ถ€๋ถ„์ด ๋งŽ์•„ ๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ ์ด ํšŒ์‚ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—” ํŒ๋งค ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์ถ”์ถœํ•ด๋‚ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

๋‹ค์Œ์œผ๋กœ ์‚ดํŽด ๋ณผ ํ…Œ์ด๋ธ”์€ orderdetails ํ…Œ์ด๋ธ”์ด๋‹ค. ์ œํ’ˆ์˜ ๊ฐœ๋‹น ๋‹จ๊ฐ€์™€ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด ์žˆ๊ณ  productCode๋กœ products ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ฒฐ๋ผ ์žˆ๋‹ค. ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด ์ญ‰ ๋‚˜์—ด๋ผ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— products์™€ orders๋ฅผ ํ•จ๊ป˜ ๋ณด๋ฉด ์ œํ’ˆ์˜ ํ‰๊ท  ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด๋‚˜ ์ด ๋งค์ถœ์•ก, ์ž”์—ฌ ์žฌ๊ณ ์ˆ˜๋Ÿ‰, ์•ˆ์ „ ์žฌ๊ณ  ๋“ฑ์˜ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๊ฒ ๋‹ค. ์•„์‰ฌ์šด ๊ฒƒ์€, ์ฃผ๋ฌธ ์ผ์ž๊ฐ€ ์—†๋‹ค. ๊ธฐ๊ฐ„๋ณ„๋กœ ๊ทธ๋ฃนํ•ด ๋ณผ ์ˆ˜ ์—†์œผ๋‹ˆ ์œ ์˜๋ฏธํ•œ ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ…Œ์ด๋ธ” ํ•˜๋‚˜๊ฐ€ ๋” ํ•„์š”ํ•˜๊ฒ ๋‹ค. 

 

 

 

 

๋ฐ”๋กœ orders ํ…Œ์ด๋ธ”์ด๋‹ค. ์ด ํ…Œ์ด๋ธ”์—๋Š” ์ฃผ๋ฌธ ์ผ์ž(orderDate)์™€ ์ฃผ๋ฌธํ•œ ์‚ฌ๋žŒ์˜ ๊ณ ๊ฐ ๋ฒˆํ˜ธ(customerNumber), ๊ทธ๋ฆฌ๊ณ  ์ฃผ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ ํ˜€ ์žˆ๋‹ค. ํ…Œ์ด๋ธ”์„ ์‚ดํŽด ๋ณด๋‹ˆ 2003๋…„ 01์›”๋ถ€ํ„ฐ 2005๋…„ 05์›”๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋ผ ์žˆ๋‹ค. ์ด๊ฑธ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ ๋ชจ์•„์กŒ๋‹ค. ์ด์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ˆ์˜๊ฒŒ ๋‹ค๋“ฌ์–ด๋ณด์ž.

 

 

 

 

INNER JOIN: ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ๋ชจ์•„์„œ ๋ณด๊ธฐ

 

CASE WHEN์€ ์กฐ๊ฑด์„ ๋‹ค๋Š” ๋ฐ ์ˆ˜๋Ÿ‰ ์ œํ•œ์ด ์—†๋‹ค. ์›ํ•˜๋Š” ์ˆ˜๋Ÿ‰๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋‹จ ์†Œ๋ฆฌ๋‹ค. SELECT ์ ˆ์—์„œ CASE WHEN์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์—์„œ ๊ตฌ๊ฐ„์— ๋งž์ถฐ ๊ฐ’์„ ๋‹ค์‹œ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ ๋กœ์šฐ๋“ค์„ ์„ธ๋ถ„ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œ ํ…Œ์ด๋ธ”์—์„œ๋งŒ ์ง„ํ–‰ํ•˜๊ธฐ๋Š” ์กฐ๊ธˆ ์–ด๋ ต๋‹ค. ๊ฐ ์ •๋ณด๊ฐ’์ด ๋‘ ํ…Œ์ด๋ธ”์—์„œ ๊ณต์œ ํ•˜๋Š” ๊ฐ’(๊ธฐ๋ณธํ‚ค)์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฅผ ํ…Œ๋ฉด, orderdetails์—์„œ๋Š” ์ œํ’ˆ์˜ ๊ฐ’๊ณผ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด ์žˆ์ง€๋งŒ ์ฃผ๋ฌธ ์ผ์ž์™€ ์ฃผ๋ฌธ์ž๋ช…์ด ์—†๋‹ค. ์ด ๋‘ ์ •๋ณด๊ฐ’์€ orders ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด์ „ ํฌ์ŠคํŠธ์—์„œ JOIN์— ๊ด€ํ•ด ๋ฐฐ์› ๋‹ค. INNER JOIN์„ ํ™œ์šฉํ•˜๋ฉด ๊ฐ๊ธฐ ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์›ํ•˜๋Š” ์ปฌ๋Ÿผ์„ ๊ฐ๊ฐ ๊ฐ€์ ธ์™€ ์žฌ์กฐ๋ฆฝํ•ด SELECT ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๋ง์ด๋‹ค.

 

SELECT ods.orderDate
, ods.customerNumber
, odd.orderNumber
, odd.productCode
        , odd.quantityOrdered
        , odd.priceEach
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber

 

 

 

 

์ด๋ ‡๊ฒŒ INNER JOIN์œผ๋กœ ์ •๋ณด๋ฅผ ๊ฐ๊ฐ ๊ฐ€์ ธ์™€ ์ฃผ๋ฉด, ์ผ์ž๋ณ„๋กœ ์–ด๋–ค ์ƒํ’ˆ์ด ๋ˆ„๊ตฌ์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ํŒ”๋ ธ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ 2003๋…„ ๊ธฐ์ค€์œผ๋กœ ์ œํ’ˆ๋ณ„ ๋งค์ถœ ์ˆœ์œ„๋ฅผ ๋ฝ‘์•„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

WHERE, GROUP BY: 1๋…„์น˜ ์ œํ’ˆ๋ณ„ ๋งค์ถœ ์ˆœ์œ„ ๋ฝ‘๊ธฐ

 

SELECT ods.orderDate
, ods.customerNumber
, odd.orderNumber
, odd.productCode
        , odd.quantityOrdered
        , odd.priceEach
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber
AND orderDate LIKE '2003%'
ORDER BY productCode;

 

 

 

 

WHERE ์ ˆ์— ์กฐ๊ฑด์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ด ์คฌ๋‹ค. 2003๋…„์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์กฐ๊ฑด์ด๋‹ค. ORDER BY๋Š” productCode๋กœ ์คฌ๋‹ค. ์ œํ’ˆ ์ฝ”๋“œ ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ๊ฒŒ ๋ณด์ธ๋‹ค. (์‹œ๊ธฐ๋‚˜ ๊ณ ๊ฐ ์ง‘๋‹จ์˜ ์ฐจ์ด์— ๋”ฐ๋ผ ์ตœ์ข… ํŒ๋งค๊ฐ€๋Š” ์˜ค๋ฅด๋‚ด๋ฆฌ๋Š” ๊ฒŒ ๋ณด์ธ๋‹ค.) ์—ฌ๊ธฐ๋‹ค ์ƒํ’ˆ๋ณ„ ์—ฐ๋งค์ถœ์•ก์„ ๋ฝ‘๊ณ  ์ •๋ ฌํ•ด ์ฃผ๋ฉด ์˜ˆ์˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

SELECT productCode
, ROUND(AVG(priceEach), 2) AS avg_priceEach
    , SUM(quantityOrdered) AS sum_quantity
    , (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) AS year_sales
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber
AND orderDate LIKE '2003%'
GROUP BY productCode
ORDER BY year_sales DESC;

 

 

 

 

ํ›จ์”ฌ ๋ณด๊ธฐ ํŽธํ•ด์กŒ๋‹ค. ์—ฌ๊ธฐ์„œ ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜๋ฌธ์„ ํ•ด์†Œํ•˜๊ณ  ๊ฐˆ๊นŒ. ์™œ priceEach๋Š” ํ‰๊ท ์„ ๊ตฌํ•˜๊ณ  quantity๋Š” ํ•ฉ๊ณ„ ๊ฐ’์„ ๊ตฌํ•˜๋Š”๊ฐ€๊ฐ€ ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๊ฑด priceEach๊ฐ€ ๊ตฌ๋งค์•ก(๊ฐœ๋‹น ๋‹จ๊ฐ€*์ˆ˜๋Ÿ‰)์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋‹น ๋‹จ๊ฐ€์—ฌ์„œ ๊ทธ๋ ‡๋‹ค. ํ•ด๋‹น ํšŒ์‚ฌ์˜ ๊ฒฝ์šฐ ๋„๋งค๋กœ๋งŒ ๊ฑฐ๋ž˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œํ’ˆ ๊ฐ€๊ฒฉ์ด ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š๊ณ  ํ˜‘์˜ ์—ฌ๋ถ€์™€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ ๋™์ ์œผ๋กœ ๋‹จ๊ฐ€๊ฐ€ ์กฐ์ •๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฐ๋งค์ถœ, year_sales๋ฅผ ๋ฝ‘๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ๊ฐœ๋‹น ์‹คํŒ๋งค๊ฐ€์˜ ํ‰๊ท ๊ณผ ํŒ๋งค ๊ฐœ์ˆ˜๋ฅผ ๊ณฑํ•ด์•ผ๋งŒ ํ–ˆ๋‹ค.

 

 

CASE WHEN: ์ƒํ’ˆ ์„ธ๋ถ„ํ™”ํ•ด์„œ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ”„๋กœ๋ชจ์…˜ ์ „๋žต ์งœ๊ธฐ

 

๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ๋งค์ถœ 1์œ„ ์ƒํ’ˆ๊ณผ 2์œ„ ์ƒํ’ˆ์˜ ํŽธ์ฐจ๊ฐ€ ํฌ๋‹ค. ์ญ‰ ๋‚ด๋ ค๋ณด๋ฉด ๋ง‰์ˆœ์œ„ ์ƒํ’ˆ์€ 1๋งŒ ๋‹ฌ๋Ÿฌ ์ •๋„๋กœ 1์œ„์™€ ๊ฑฐ์˜ 10๋ฐฐ ๊ฐ€๋Ÿ‰ ๋งค์ถœ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”๋ฐ ์ƒ์œ„๊ถŒ ์ƒํ’ˆ ๋Œ€๋น„ํ•ด์„œ ์ œํ’ˆ ๋‹จ๊ฐ€๋„ ๋‚ฎ๊ณ  ํŒ๋งค ์ˆ˜๋Ÿ‰ ์ข€ ๋ถ€์ง„ํ•˜๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ๋ณด๋ฉด ๊ทธ๋ฃน๋ณ„๋กœ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. 

 

SELECT productCode
, ROUND(AVG(priceEach), 2) AS avg_priceEach
    , SUM(quantityOrdered) AS sum_quantity
    , (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) AS year_sales
    , ROW_NUMBER () 
OVER (
ORDER BY (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) DESC
            ) AS sales_rank
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber
AND orderDate LIKE '2003%'
GROUP BY productCode
ORDER BY year_sales DESC;

 

 

 

 

year_sales๋ฅผ ์กฐ๊ธˆ ๋” ์ง๊ด€์ ์œผ๋กœ ๋ณด๊ณ , ์ฐจํ›„์— ๋‹ค๋ฅธ ๋…„๋„๋ณ„ ์„ธ๋ถ„ํ™” ์ง„ํ–‰ ์‹œ์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆœ์œ„๋ฅผ ๋จผ์ € ๋ฝ‘์•˜๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒํ’ˆ์„ 'high', 'medium', 'low' ์„ธ ๊ฐ€์ง€ ์ง‘๋‹จ์œผ๋กœ ๋‚˜๋ˆ ๋ณผ ๊ฒƒ์ด๋‹ค. 'high'๋Š” ๋งค์ถœ ์ƒ์œ„๊ถŒ์œผ๋กœ ์žฌ๊ณ ๋ฅผ ์ง€์† ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•˜๋ฉฐ ํŒ๋งค ๋™ํ–ฅ์„ ์ง€์†์ ์œผ๋กœ ์ฒดํฌํ•ด์•ผ ํ•  ์ƒ์œ„ ์‹ญ ํผ์„ผํŠธ, ๋ฐ˜๋Œ€๋กœ 'low'๋Š” ์žฌ๊ณ ๊ฐ€ ๊ณผ๋‹คํ•˜๋‹ค๋ฉด ์ตœ์šฐ์„ ์œผ๋กœ ์†Œ์ง„ํ•˜๊ณ  ์žฌ๊ณ ๋ฅผ ๊ฐ์ถ• ์šด์˜ํ•ด์•ผ ํ•  ํ•˜์œ„ ์‹ญ ํผ์„ผํŠธ๋‹ค.

 

ํผ์„ผํŠธ๋ฅผ ์ง์ ‘ ์ง‘๊ณ„ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์งœ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์„œ์นญ ์‹ค๋ ฅ์ด ๋ถ€์กฑํ–ˆ๋˜ ๊ฑด์ง€ ๊ฒฐ๊ตญ ๋ชป ์ฐพ์•„์„œ, ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ 10์œผ๋กœ ๋‚˜๋ˆ ์„œ ์œ„ ์•„๋ž˜๋กœ 11์œ„์”ฉ ๋นผ ์คฌ๋‹ค(...)

 

 

์ž‘ํ’ˆ๋ช… ๋ฏธ์Šคํ„ฐ ์•„๋‚ ๋กœ๊ทธ......

 

 

SELECT productCode
, ROUND(AVG(priceEach), 2) AS avg_priceEach
    , SUM(quantityOrdered) AS sum_quantity
    , (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) AS year_sales
    , ROW_NUMBER () 
OVER (
ORDER BY (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) DESC
            ) AS sales_rank
CASE 
WHEN ROW_NUMBER () 
OVER (
ORDER BY (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) DESC
            ) BETWEEN 1 AND 11 THEN 'high'
WHEN ROW_NUMBER () 
OVER (
ORDER BY (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) DESC
            ) BETWEEN 98 AND 109 THEN 'low'
ELSE 'medium'
END AS sales_seg
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber
AND orderDate LIKE '2003%'
GROUP BY productCode;

 

 

 

 

 

๊ฒฐ๊ณผ์ ์œผ๋ก  ์ž˜ ๋‚˜์™”๋‹ค! ๊ฐ€๋…์„ฑ ์œ„ํ•ด BETWEEN์œผ๋กœ ๊ฐ’์„ ์ง€์ •ํ•ด ์คฌ๋Š”๋ฐ ์—ฐ์‚ฐ๋ถ€ํ˜ธ๋กœ ์žก์•„ ์ค˜๋„ ๋ฌด๋ฐฉํ•˜๊ฒ ๋‹ค. ๊ตณ์ด ์ˆœ์œ„๋ฅผ ์ง‘๊ณ„ํ•œ ๊นŒ๋‹ญ์€ ์ดํ›„์— ์ผ์ผ์ด ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ๋‹ค. year_sales๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์žก๋‹ค ๋ณด๋‹ˆ ๋งŽ์ด ๊ธธ์–ด์กŒ๋Š”๋ฐ, ๋” ํšจ์œจ ์ข‹๊ฒŒ ์งค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ถ„๋ช… ์žˆ์ง€ ์•Š๋‚˜ ์‹ถ๋‹ค. ์ฐจํ›„ ์•Œ๊ฒŒ ๋˜๋ฉด ์™€์„œ ๋ง๋ถ™์—ฌ ๋ณด๊ฒ ๋‹ค.

 

CASE WHEN์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ๋‹ค. 1) ์ƒ์œ„ ์กฐ๊ฑด์ด ์šฐ์„ ์ˆœ์œ„๋กœ ์žกํ˜€ ์žˆ์–ด์„œ ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ์‹œ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ๋„ฃ์–ด ์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฑฐ. ๋งŒ์•ฝ์— ์œ„ ์ฟผ๋ฆฌ๋ฅผ ์—ฐ์‚ฐ๊ธฐํ˜ธ๋กœ ์กฐ๊ฑด์„ ๊ฒน์น  ์ˆ˜ ์žˆ๊ฒŒ ์žก์•„ ๋’€๋‹ค๋ฉด ๋จผ์ € ์„ ์–ธ๋œ ํ•œ ๊ฐ€์ง€ ์ง‘๋‹จ์— ๊ฐ’๋“ค์ด ๋‹ค ๋ชฐ๋ ค ๋ฒ„๋ฆฌ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๋ฌธ๋ฒ•์€ ํ•œ ๋ฒˆ ํฌํ•จ๋œ ์ดํ›„์˜ ๋งŒ์กฑ ์กฐ๊ฑด์„ ๋ฌด์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 2) ELSE๋ฅผ ๋„ฃ์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•˜์ง€๋งŒ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์„ธ๋ถ„ํ™”๋˜์ง€ ์•Š๋Š” ๋กœ์šฐ๋Š” ์ „๋ถ€ ๋‹ค NULL ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฑฐ๋‹ค. ํ•ด๋‹น ๋‘ ๊ฐ€์ง€๋ฅผ ์ฃผ์˜ํ•ด์„œ ์งœ ์ฃผ์ž.

 

 

 

 

 

 

 

 

์ฐธ๊ณ 

suy379๋‹˜ ํ‹ฐ์Šคํ† ๋ฆฌ

mySQL ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋”๋ณด๊ธฐ
TOOLS/SQL