Growth ๐ŸŒณ/Practice ๐Ÿ’ป

[DATA ON AIR/ ํ€ด์ฆˆ๋กœ ๋ฐฐ์šฐ๋Š” SQL] ์—ฐ์†๋œ ๋‚ ์งœ๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž

์ธ” 2023. 3. 29. 23:31

๋ณธ ๋ฌธ์ œ๋Š” ํ•œ๊ตญ๋ฐ์ดํ„ฐ์‚ฐ์—…์ง„ํฅ์› DATA ON-AIR์—์„œ '๊ธฐ์ˆ ์ž๋ฃŒ'๋กœ ์ œ๊ณตํ•˜๋Š” SQL ํ€ด์ฆˆ์ž…๋‹ˆ๋‹ค.

 

 

https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?pageid=4&mod=document&keyword=%ED%80%B4%EC%A6%88&uid=236593 

 

ํ€ด์ฆˆ๋กœ ๋ฐฐ์šฐ๋Š” SQL - ์—ฐ์†๋œ ๋‚ ์งœ๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž

โ—Ž ์—ฐ์žฌ๊ธฐ์‚ฌ โ—Ž โ–ถ ํ€ด์ฆˆ๋กœ ๋ฐฐ์šฐ๋Š” SQL - ์—ฐ์†๋œ ๋‚ ์งœ๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž โ–ท ํ€ด์ฆˆ๋กœ ๋ฐฐ์šฐ๋Š” SQL - IP ๋ชฉ๋ก ์ •๋ ฌํ•˜๊ธฐ โ–ท ํ€ด์ฆˆ๋กœ ๋ฐฐ์šฐ๋Š” SQL - IP ๋ชฉ๋ก ์ •๋ ฌํ•˜๊ธฐโ…ก โ–ท ํ€ด์ฆˆ๋กœ ๋ฐฐ์šฐ๋Š” SQL, ์กฐ๊ฑด

dataonair.or.kr

 

์—ฐ์†๋œ ๋‚ ์งœ๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž


๋ฌธ์ œ

๋ฒˆํ˜ธ์™€ ๋‚ ์งœ๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”(<ํ‘œ 1> ์ฐธ์กฐ)์—์„œ ๋ฒˆํ˜ธ๋ณ„๋กœ ์—ฐ์†๋œ ๋‚ ์งœ๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ <ํ‘œ 2>์™€ ๊ฐ™์ด ๋ฒˆํ˜ธ, ์‹œ์ž‘์ผ, ์ข…๋ฃŒ์ผ, ์ผ์ˆ˜๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.


<ํ‘œ 1> ์›๋ณธ ํ…Œ์ด๋ธ”


ํ’€์ด

<์ฐธ๊ณ ์‚ฌํ•ญ>

ํ’€์ด ํ•  ๋•Œ ํ…Œ์ด๋ธ”์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋งŒ๋“ค์—ˆ๋‹ค.

๋˜ํ•œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ์—์„œ visit_dt๊ฐ€ timestamp ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ ธ ์ฟผ๋ฆฌ์—์„œ DATE ๋ณ€ํ™˜์„ ํ•ด์คฌ๋‹ค.

 

 · ํ…Œ์ด๋ธ”๋ช… : user_log

 · ์ปฌ๋Ÿผ๋ช… : NO → id, DT → visit_dt

 

๋ฌธ์ œ์—์„œ ์ค‘์š”ํ•œ ์ ์€ id๋ณ„๋กœ ์—ฐ์†๋˜๋Š” visit_dt๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

  โ‘  ์‚ฌ์šฉ์ž ๋ณ€์ˆ˜*๋ฅผ ์„ ์–ธํ•ด์„œ id, visit_dt ์ˆœ์œผ๋กœ ์ˆœ๋ฒˆ์„ ๋ถ€์—ฌํ•ด์ฃผ์—ˆ๋‹ค.

  โ‘ก visit_dt ์—์„œ ROWNUM(๊ฒฝ๊ณผ์ผ์ˆ˜)์„ ๋นผ์ค˜์„œ ์—ฐ์†๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ผ์ž(GRP)๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ–ˆ๋‹ค.

SELECT ul.id, DATE(ul.visit_dt) visit_dt,
	   @ROWNUM := @ROWNUM +1 AS ROWNUM,
       DATE_ADD(DATE(ul.visit_dt), INTERVAL -(@ROWNUM) DAY) AS GRP
 FROM data_on_air.user_log ul, (SELECT @ROWNUM := 0) NUM

 

์œ„ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”๋กœ ํ•˜์—ฌ id, GRP๋ณ„๋กœ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด id๋ณ„ → ์ผ์ž๊ตฌ๊ฐ„๋ณ„ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT T1.id, MIN(T1.visit_dt) AS from_dt
			, MAX(T1.visit_dt) AS to_dt
			, COUNT(*) AS CNT
         FROM (
                 SELECT ul.id, DATE(ul.visit_dt) visit_dt,
                        @ROWNUM := @ROWNUM +1 AS ROWNUM,
                        DATE_ADD(DATE(ul.visit_dt), INTERVAL -(@ROWNUM) DAY) AS GRP
                 FROM data_on_air.user_log ul, (SELECT @ROWNUM := 0) NUM
             ) T1
GROUP BY T1.id, T1.GRP;


โœ  ์ฐธ๊ณ 

 

* ์‚ฌ์šฉ์ž ๋ณ€์ˆ˜

 

[์‚ผ์พŒํ•œ IT๊ฐ•์˜] MySQL ๋ณ€์ˆ˜ ์ข…๋ฅ˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•

์•ˆ๋…•ํ•˜์„ธ์š”! ์‚ผ์พŒํ•œ IT๊ฐ•์˜ ๋ฐฑ์†Œ๋ผ๊ฐ•์‚ฌ ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด MySQL ์˜ ๋ณ€์ˆ˜ ์ข…๋ฅ˜์™€ ์‚ฌ์šฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. 1. ์‚ฌ์šฉ์ž ์ •์˜ ๋ณ€์ˆ˜ 1-1. ์‚ฌ์šฉ์ž ์ •์˜ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™” SET @๋ณ€์ˆ˜์ด๋ฆ„ = ๋Œ€์ž…๊ฐ’; ํ˜น์€ S

three-pleasure.tistory.com