์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ํ๊ท๋ถ์
- ํ์ด์ฌ
- ํ์ด์ฌ ์ฒ ์ ์ ๋ฌธ
- ํ์ด์ฌ ์ฒ ์ ์ ๋ฌธ
- ํ ์คํธ ๋ถ์
- ๋ด์ผ๋ฐฐ์์นด๋
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์น ์คํฌ๋ฉํ
- ์คํ๋ฅดํ์ฝ๋ฉ
- ๋ด์ผ๋ฐฐ์์บ ํ
- ํ์ด์ฌ ๋จธ์ ๋ฌ๋ ์๋ฒฝ ๊ฐ์ด๋
- wil
- TiL
- ์ค๋ธ์
- ์คํ๋ฅดํ
- ํ๋ก์ ํธ
- ์คํ๋ฅดํ ์ฝ๋ฉ
- ์คํ๊ท๋ชจํ
- SQL
- ๋ด์ผ๋ฐฐ์
- ์ค์ ๋ฐ์ดํฐ ๋ถ์ ํ๋ก์ ํธ
- hackerrank
- ํ์ด์ฌ ์๋ฒฝ ๊ฐ์ด๋
- ๋ฏธ์ธ๋จผ์ง
- MySQL
- ํ์ด์ฌ ๋จธ์ ๋ฌ๋ ์๋ฒฝ๊ฐ์ด๋
- harkerrank
- ํ๋ก๊ทธ๋๋จธ์ค
- Cluster
- R
- Today
- Total
OkBublewrap
2025-01-10 TIL (QCC ๋ฆฌ๋ทฐ) ๋ณธ๋ฌธ
๐ ์๋!!? ์ธ์ ๋ฑ์ฌ ๋์์ด..!
๋ํ ๋ถ์์ ํตํ ์ฌํ์ ์์ญ๋ ์ธก์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ - ChatGPT API๋ฅผ ์ด์ฉํ์ฌ -
๋ํ ๋ถ์์ ํตํ ์ฌํ์ ์์ญ๋ ์ธก์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ - ChatGPT API๋ฅผ ์ด์ฉํ์ฌ -
์ฐ๊ตฌ๋ชฉ์ : ์ด ์ฐ๊ตฌ์ ๋ชฉ์ ์ ๊ฑฐ๋ ์ธ์ด ๋ชจ๋ธ์ ๋ํ์ ChatGPT๋ฅผ ์ด์ฉํ์ฌ ๋ํ ๋ถ์์ ํตํ ์ฌํ์ ์์ญ๋ ์ธก์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฅ์ฑ์ ํ์ํ๋ ํ๋กํ ํ์ ์ ๊ฐ๋ฐํ๋ ๊ฒ์ด๋ค. ์ฐ๊ตฌ ๋ฐฉ๋ฒ: ์ด
www.kci.go.kr
์ด๋ค๋ณด๋ ์ด๋ฐ์ผ์ด ์๊ธฐ๋๊ตฌ๋, ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ ํ์ ๋ถ๋ถ ์ค ์ด์ ๋งคํ, ์๊ฐํ ๋ถ๋ถ์ ๋ด๋น ํ๋๋ฐ ๋ ผ๋ฌธ์ ๋ฑ์ฌ๋๋ค๋..
์ ๋ง ์ ๊ธฐํ ๊ฒฝํ์ธ ๊ฒ ๊ฐ๋ค. ์๋ฌดํผ ๊ฐ๊ฐ๋ฌด๋ํฉ๋๋ค!!!
QCC ๋ฆฌ๋ทฐ
๋ฌธ์ 1 : ์ฒซ ์ฃผ๋ฌธ ๊ณ ๊ฐ ์ฐ๋๋ณ ๋งค์ถ ์กฐํ
1. 2011๋ 12์์ ์ฒซ ์ฃผ๋ฌธ์ ํ ๊ณ ๊ฐ๋ค์ ์ฐ๋๋ณ ๋งค์ถ
2. ๊ณ ๊ฐ ID ์ค๋ฆ์ฐจ์, ์ฐ๋ ์ค๋ฆ์ฐจ์
๋ฌธ์ 1 ํ์ด
-- 1.2011๋
12์์ ์ฒซ ์ฃผ๋ฌธํ ๊ณ ๊ฐ
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING year(min(CAST(orderdate AS date))) = '2011'
AND month(min(CAST(orderdate AS date))) = '12'
customerid์ ๊ทธ๋ฃนํ ํด์ ๊ฐ์ฅ ์์ ๋ ์ง์ธ์ด 2011๋ 12์์ธ ๊ณ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
-- 2.2011๋
12์์ ์ฒซ ์ฃผ๋ฌธํ ๊ณ ๊ฐ ์ฃผ๋ฌธ ๋ด์ญ
SELECT s.customerid, unitprice * orderqty AS totalprice, left(s.orderdate, 4) AS year
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING year(min(CAST(orderdate AS date))) = '2011'
AND month(min(CAST(orderdate AS date))) = '12'
)
ํด๋น ๊ณ ๊ฐ๋ค์ ์ฃผ๋ฌธ๊ฐ์ ธ์ค๊ธฐ totalprice๋ก ์ด๊ธ์ก ๊ณ์ฐ
-- 3. ์ฐ๋๋ณ ๊ณ์ฐ
SELECT s.customerid, left(s.orderdate, 4) AS year, sum(unitprice * orderqty) AS gmv
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING year(min(CAST(orderdate AS date))) = '2011'
AND month(min(CAST(orderdate AS date))) = '12'
)
GROUP BY 1, 2
ํด๋น ๊ณ ๊ฐ๋ค์ ์ฐ๋๋ณ๋ก ์ง๊ณ gmv๋ก ๊ณ์ฐ
-- 4. ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ, ์ ๋ ฌ
SELECT s.customerid
,(SELECT concat(c.firstname, ' ', c.lastname)
FROM customer c
WHERE s.customerid = c.customerid) AS customer_name
, CAST(left(s.orderdate, 4) AS UNSIGNED) AS year
, sum(unitprice * orderqty) AS gmv
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING year(min(CAST(orderdate AS date))) = '2011'
AND month(min(CAST(orderdate AS date))) = '12'
)
GROUP BY s.customerid, CAST(left(s.orderdate, 4) AS UNSIGNED)
ORDER BY s.customerid, CAST(left(s.orderdate, 4) AS UNSIGNED);
์๊ด ์๋ธ์ฟผ๋ฆฌ๋ก ํด๋น ์ด๋ฆ ๊ฐ์ ธ์ค๊ณ ์ ๋ ฌ
๋ฌธ์ 2
๋ฌธ์ 2 ํ์ด
1. ๋ ์ง ๊ตฌ๊ฐ์ ์ฌ์ฉํ ๊ณ์ฐ
-- 1. 2011-12 ์ฒซ ๊ตฌ๋งค ์ฌ์ฉ์ ํ
์ด๋ธ ๊ฐ์ ธ์ค๊ธฐ
SELECT s.customerid,
CAST(left(s.orderdate, 4) AS UNSIGNED) AS year,
sum(s.orderqty * s.unitprice) AS gmv
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING min(orderdate) like '2011-12%'
)
GROUP BY s.customerid, left(s.orderdate, 4)
ORDER BY 1, 2
๋ฌธ์ 1์ ์ฌ์ฉํ๋ ํ ์ด๋ธ ์ฌ์ฉ
-- 2 ์ง๊ณ ๊ณ์ฐ
temp_02 AS (
SELECT customerid, round(sum(gmv) / (max(year) - min(year) + 1),2) AS avg_yearly_gmv
FROM temp_01
GROUP BY customerid
)
๊ตฌ๊ฐ์ ์ด์ฉํ ์ฐ ํ๊ท ๊ณ์ฐ
-- 3. ์ด๋ฆ ๋ถ์ด๊ธฐ, ์ ๋ ฌ
SELECT customerid
, (SELECT concat(c.firstname, ' ', c.lastname)
FROM customer c
WHERE t2.customerid = c.customerid) AS customer_name
, avg_yearly_gmv
FROM temp_02 t2
ORDER BY customerid ASC;
์ถ๋ ฅ์ ๋ง๋ ์ด๋ฆ, ์ ๋ ฌ ์งํ
-- ์ ์ฒด์ฝ๋
WITH temp_01 AS (
SELECT s.customerid,
CAST(left(s.orderdate, 4) AS UNSIGNED) AS year,
sum(s.orderqty * s.unitprice) AS gmv
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING min(orderdate) like '2011-12%'
)
GROUP BY s.customerid, left(s.orderdate, 4)
ORDER BY 1, 2
),
temp_02 AS (
SELECT customerid, round(sum(gmv) / (max(year) - min(year) + 1),2) AS avg_yearly_gmv
FROM temp_01
GROUP BY customerid
)
SELECT customerid
, (SELECT concat(c.firstname, ' ', c.lastname)
FROM customer c
WHERE t2.customerid = c.customerid) AS customer_name
, avg_yearly_gmv
FROM temp_02 t2
ORDER BY customerid ASC;
2. dim_years ์ฌ์ฉ
-- 1. 2011-12 ๊ณ ๊ฐ์ค ์ฒซ๋ฒ์งธ ์ฃผ๋ฌธ ์ฐ๋, ๋ง์ง๋ง ์ฃผ๋ฌธ ์ฐ๋ ๊ฐ์ ธ์ค๊ธฐ
SELECT
c.customerid,
CONCAT(c.firstname, ' ', c.lastname) customer_name,
MIN(YEAR(s.orderdate)) first_order_year,
MAX(YEAR(s.orderdate)) last_order_year
FROM
customer c
INNER JOIN sales_order s ON c.customerid = s.customerid
GROUP BY c.customerid, customer_name
HAVING DATE_FORMAT(MIN(s.orderdate), '%Y-%m') = '2011-12'
customer_filtered Table
customerid | custumer_name | first_order_year | last_order_year |
11387 | Megan Ramirez | 2011 | 2013 |
11388 | Joseph Martin | 2011 | 2013 |
-- 2. ์ต์ด ์ฃผ๋ฌธ ์ฐ๋, ๋ง์ง๋ง ์ฃผ๋ฌธ ์ฐ๋ ์ฌ์ด ์ฑ์ฐ๊ธฐ
select
cf.customerid,
cf.customer_name,
d.year
from customer_filtered cf
left join dim_years d on d.year between cf.first_order_year and cf.last_order_year
dim Table
year |
2000 |
2001... |
Between Join
customer_years Table
cf.customerid | cf.custumer_name | d.year |
11387 | Megan Ramirez | 2011 |
11387 | Megan Ramirez | 2012 |
11387 | Megan Ramirez | 2013 |
11388 | Joseph Martin | 2011 |
11388 | Joseph Martin | 2012 |
11388 | Joseph Martin | 2013 |
-- 3. ๊ณ ๊ฐ๋ณ ์ฐ๋๋ณ ํฉ๊ณ
SELECT
cy.customerid,
cy.customer_name,
cy.year,
COALESCE(SUM(s.unitprice * s.orderqty),0) gmv
FROM
customer_years cy
LEFT JOIN sales_order s ON cy.customerid=s.customerid AND cy.year = YEAR(s.orderdate)
GROUP BY cy.customerid, cy.customer_name, cy.year
customer_years ํ ์ด๋ธ์ ๊ฐ ์ฐ๋, ๊ณ ๊ฐ๋ฒํธ ๊ฒฐํฉ
null ๊ฐ 0์ผ๋ก
-- ๊ณ ๊ฐ๋ณ ์ฐํ๊ท ๊ณ์ฐ, ์ ๋ ฌ
SELECT
customerid,
customer_name,
ROUND(AVG(gmv), 2) avg_yearly_gmv
FROM
customer_gmv
GROUP BY customerid, customer_name
ORDER BY customerid;
๋ง๋ค์ด์ง ํ์ผ๋ก ๊ณ์ฐ
๋ฌธ์ 3 : ๊ณ ๊ฐ๋ณ ์ต๋ ์ฃผ๋ฌธ ์๋ ์ฐ๋์ ์ฃผ๋ฌธ ์๋ ์ง๊ณ
1. 2011๋ 12์์ ์ฒซ ์ฃผ๋ฌธ์ ํ ๊ณ ๊ฐ ๋์, ๊ฐ ์ฐ๋์์ ์ฃผ๋ฌธ ์๋ ์ง๊ณ, ์ต๋ ์ฃผ๋ฌธ ์๋๊ณผ ๊ทธ ์ต๋ ์ฃผ๋ฌธ ์๋ ๋ฐ์์ํจ ์ฐ๋
2. ์ต๋ ์ฃผ๋ฌธ ์๋์ด ๊ฐ์ ์ฐ๋๊ฐ ์์ผ๋ฉด, ๊ฐ์ฅ ์ต๊ทผ ์ฐ๋ ์ถ๋ ฅ
3. ๊ณ ๊ฐ ID ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
๋ฌธ์ 3 ํ์ด
-- 1. 2011๋
12์ ์ฒซ ์ฃผ๋ฌธ์ ํ ๊ณ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
SELECT *
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING year(min(CAST(orderdate AS date))) = '2011'
AND month(min(CAST(orderdate AS date))) = '12'
)
๋ฌธ์ 1๋ฒ์ ๊ฐ์ด ์ฒซ ์ฃผ๋ฌธ์ ํ ๊ณ ๊ฐ ์ฃผ๋ฌธ ํ ์ด๋ธ ๊ฐ์ ธ์ค๊ธฐ
-- 2. ์ฐ๋๋ณ๋ก ์ฃผ๋ฌธ ์๋ ์ง๊ณ
SELECT s.customerid,
CAST(left(s.orderdate, 4) AS UNSIGNED) AS year_order,
sum(s.orderqty) AS total_qty
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING year(min(CAST(orderdate AS date))) = '2011'
AND month(min(CAST(orderdate AS date))) = '12'
)
GROUP BY s.customerid, CAST(left(s.orderdate, 4) AS UNSIGNED)
๊ณ ๊ฐ ์์ด๋ณ ์ฐ๋๋ณ ์ฃผ๋ฌธ ์๋ ์ง๊ณ
-- 3. ์ฐ๋๋ณ๋ก ์ฃผ๋ฌธ ์๋ ์ง๊ณ ์์ ๋งค๊ธฐ๊ธฐ
WITH temp_01 AS (
SELECT s.customerid,
CAST(left(s.orderdate, 4) AS UNSIGNED) AS year_order,
sum(s.orderqty) AS total_qty
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING year(min(CAST(orderdate AS date))) = '2011'
AND month(min(CAST(orderdate AS date))) = '12'
)
GROUP BY s.customerid, CAST(left(s.orderdate, 4) AS UNSIGNED)
)
SELECT *,
RANK() OVER (PARTITION BY customerid ORDER BY total_qty desc, year_order desc) AS rk
FROM temp_01
๊ณ ๊ฐ์์ด๋๋ณ ๊ทธ๋ฃน, ์ฃผ๋ฌธ๊ฑด์ ๋ด๋ฆผ์ฐจ์ ๊ฐ์ผ๋ฉด ์ฐ๋ ๋ด๋ฆผ์ฐจ์ -- ์กฐ๊ฑด 2
-- 4. ์ฐ๋๋ณ๋ก ์ฃผ๋ฌธ ์๋ ์ง๊ณ ์์ ๋งค๊ธฐ๊ธฐ
WITH temp_01 AS (
SELECT s.customerid,
CAST(left(s.orderdate, 4) AS UNSIGNED) AS year_order,
sum(s.orderqty) AS total_qty
FROM sales_order s
WHERE customerid IN
(
SELECT customerid
FROM sales_order
GROUP BY customerid
HAVING year(min(CAST(orderdate AS date))) = '2011'
AND month(min(CAST(orderdate AS date))) = '12'
)
GROUP BY s.customerid, CAST(left(s.orderdate, 4) AS UNSIGNED)
),
temp_02 AS (
SELECT *,
RANK() OVER (PARTITION BY customerid ORDER BY total_qty desc, year_order desc) AS rk
FROM temp_01
)
SELECT t2.customerid,
(SELECT concat(firstname, ' ', lastname)
FROM customer c
WHERE t2.customerid = c.customerid) AS customer_name,
t2.year_order AS max_qty_year,
t2.total_qty AS max_total_qty
FROM temp_02 t2
WHERE rk = 1
ORDER by t2.customerid
๊ฐ์ฅ ๋์ rk = 1๋ง ๊ฐ์ ธ์ค๊ธฐ, ์๊ด์๋ธ์ฟผ๋ฆฌ๋ก ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ, ๊ณ ๊ฐ์์ด๋๋ก ์ ๋ ฌ
'Today I Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2025-01-13 TIL (ํ๋ก์ ํธ ๊ฐ์ ์์ฑ๋ฒ) (0) | 2025.01.13 |
---|---|
WIL-7์ฃผ์ฐจ (0) | 2025.01.11 |
2025-01-09 TIL (SQL codekata, Sub Query) (0) | 2025.01.09 |
2025-01-08 TIL (A/B Test, ํต๊ณ๋ถํฌ) (0) | 2025.01.08 |
2025-01-07 TIL (A/B Test, SQL CodeKata) (0) | 2025.01.07 |