Knowledge๐Ÿฆข/SQL

โœ…  ๊ณผ์ œ 1. ์œ ์ €์˜ ๊ณ„์ • ์ƒ์„ฑ ํ›„ ํšŒ์› ๊ฐ€์ž… ์™„๋ฃŒ ์ „ํ™˜์œจ (location, device๋ณ„) # ๊ณผ์ œ ์„ค๋ช… ์œ ์ €์˜ ๊ณ„์ • ์ƒ์„ฑ (create_user) ํ›„ ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ (complete_signup) ์ „ํ™˜์œจ์„ ์‚ฌ์šฉ์ž ์œ„์น˜(location), ๊ธฐ๊ธฐ(device) ๋ณ„๋กœ ๊ตฌํ•ด์ฃผ์„ธ์š”. ์†Œ์ˆซ์  ๋‘˜์งธ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•˜๋ฉฐ, ์ฒ˜์Œ ์œ ์ €๊ฐ€ ๊ณ„์ •์„ ์ƒ์„ฑํ•œ ํ›„ ํ•˜๋ฃจ ์•ˆ์— ์™„๋ฃŒ๋˜์—ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋ฐฑ๋ถ„๋ฅ ๋กœ ๊ตฌํ•ด์ฃผ์„ธ์š”)  # ๊ฒฐ๊ณผ ์ถœ๋ ฅ ์˜ˆ์‹œ   # ์ •๋‹ต ์ฝ”๋“œWITH creation_user AS ( SELECT user_id, occurred_at, location, device FROM yammer_event WHERE event_name = 'create_user'), completion_sign..
# group by1) ์‚ฌ์šฉ์ด์œ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ 2) ๋ฌธ๋ฒ•select ์ปฌ๋Ÿผ,           ์ง‘๊ณ„ํ•จ์ˆ˜group by ์ปฌ๋Ÿผ  # ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ„์น˜ ๊ตฌํ•˜๊ธฐselect database() # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒํ•˜๊ธฐuse ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค;     # exists ๋ฌธ๋ฒ• ์˜ˆ์ œ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐCREATE TABLE test_user( id varchar(50), name varchar(50), email varchar(50)) CREATE TABLE test_info( id varchar(50), city varchar(50), age int) ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ํ•˜๊ธฐINSERT INTO test_user VALUES('user1', 'A', 'A@A.com'),('user2', 'B', 'B@B.com')..
# ์ด์ œ๊นŒ์ง€ ๋ฐฐ์šด ๊ฐœ๋…๋“ค 1. with ๊ฐ€์ƒํ…Œ์ด๋ธ” 2. inner join / left join / self join / cross join 3. count(*) / count(์ปฌ๋Ÿผ) / count(distinct) 4. ํ•จ์ˆ˜ over (partition by ์ปฌ๋Ÿผ order by ์ปฌ๋Ÿผ) as ๋ณ„์นญ ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ๊ทธ๋ƒฅ ์ปฌ๋Ÿผ์ƒ์„ฑ์šฉ, where ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅgroup by๋ž‘ ์‚ฌ์šฉ๋ถˆ๊ฐ€๋Šฅ with cte as ( select *, min(order_date) over (partition by customer_id) as min_date, case when order_date = customer_pref_delivery_date then 'immediate' ..
์†Œ๋น„์ž์˜ ํ–‰๋™์„ ๊ธฐ์—… ๊ด€์ ์—์„œ ์žฌ๊ตฌ์„ฑํ•œ ๊ฒƒ์œผ๋กœ, ๊ณ ๊ฐ์ด ์œ ์ž…๋˜์–ด ์ „ํ™˜์— ์ด๋ฅด๋Š” ๋‹จ๊ณ„๋ฅผ ์ˆ˜์น˜๋กœ ํ™•์ธํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ! (๊ณ ๊ฐ์ด ํผ๋„ ๋๊นŒ์ง€ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ! = ์ „ํ™˜ (CONVERSION))  ๋งˆ์ผ€ํŒ… ํผ๋„  AARRR ํผ๋„   1. ์„œ๋น„์Šค์˜ BM(Business Model)์„ ํŒŒ์•…ํ•œ๋‹ค. ์–ด๋–ป๊ฒŒํ•˜๋ฉด ์ˆ˜์ต์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์šฐ๋ฆฌ ํšŒ์‚ฌ, ์ด ์„œ๋น„์Šค๊ฐ€ ๋งค์ถœ์„ ๋‚ด๋Š” ๊ตฌ์กฐ๋Š” ๋ฌด์—‡์ผ๊นŒ? ์ˆ˜์ต๊ณผ ์ง€์ถœ์˜ ํ๋ฆ„์€ ์–ด๋–จ๊นŒ? 1) ์‹ค๋ฆฌ์ฝ˜๋ฐธ๋ฆฌ ์˜์–ด ์Šคํ”ผํ‚น ํ•™์Šต์•ฑ Speak์˜ ์˜ˆ์ƒ BM(Business Model)  2) ๋ฑ…ํฌ์ƒ๋Ÿฌ๋“œ์˜ ์˜ˆ์ƒ BM  2. BM์„ ๊ณ ๋ คํ•ด ํ•ต์‹ฌ ์ง€ํ‘œ์™€ ํผ๋„ ์Šคํ…์„ ์„ค๊ณ„ํ•ด ๋ด…๋‹ˆ๋‹ค. - BM๊ณผ align๋˜๋Š” ์ง€ํ‘œ๋“ค์„ ์ฐพ์Šต๋‹ˆ๋‹ค. 3. ์ดํƒˆ๋ฅ ์ด ํฐ ๋‹จ๊ณ„๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํผ๋„์„ ์žฌ์„ค๊ณ„ํ•  ..
# ์ด๋™ ํ‰๊ท ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์™œ ์‚ฌ์šฉํ• ๊นŒ์š”? - ๋‹จ์ˆœํžˆ ๋‚ ์งœ๋ณ„ ๋งค์ถœ ๋ฆฌํฌํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, ์ฃผ๋ง์— ๋งค์ถœ์ด ํฌ๊ฒŒ ๋ณ€๋™ํ•˜๋Š” ๊ทธ๋ž˜ํ”„ ๋“ฑ์˜ ๊ฒฝ์šฐ, ๋งค์ถœ์ด ์ƒ์Šนํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋Š”์ง€, ํ•˜๋ฝํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—, 7์ผ ๋™์•ˆ์˜ ํ‰๊ท  ๋งค์ถœ์„ ์‚ฌ์šฉํ•œ '7์ผ ์ด๋™ ํ‰๊ท '์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ์„ ์ด ์ด๋™ํ‰๊ท ์„ ์ด๋‹ค!  # ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋™ ํ‰๊ท ์„ SQL์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ•˜๋Š”๊ฐ€?! [ ํ‹€๋ฆฐ ๋‹ต ]2023.12.01~ 12.07 / 2023.12.08~12.14 ์ด๋ ‡๊ฒŒ ์ผ์ฃผ์ผ์”ฉ ๋Š์–ด์„œ 7์ผ ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ  [ ๋งž๋Š” ๋‹ต ]12.05 ์ด๋ฉด ์•ž์—์„œ ๋ถ€ํ„ฐ์•ž์—์„œ๋ถ€ํ„ฐ ์ง€๊ธˆ๊นŒ์ง€ 7์ผ๊ฐ„์˜ ํ‰๊ท ์„ ๊ตฌํ•˜๊ณ , 12.6์ผ ์ด๋ฉด ์•ž์—์„œ๋ถ€ํ„ฐ ์ง€๊ธˆ๊นŒ์ง€ 7์ผ๊ฐ„์˜ ํ‰๊ท ์„ ๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.์ด *์•ž์—์„œ ๋ถ€ํ„ฐ ์ง€๊ธˆ๊นŒ์ง€ 7์ผ๊ฐ„์˜ ํ‰๊ท ์€* ..
# ์œˆ๋„์šฐ ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜  # ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ๋„๋Œ€์ฒด ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? A ) ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์žƒ๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค ๐Ÿฅณ  Q ) ์ปฌ๋Ÿผ์„ ์žƒ๋Š”๋‹ค๋Š”๊ฒŒ ๋ฌด์Šจ์†Œ๋ฆฌ์ž„?์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”!!!   ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์žCREATE TABLE chat_logs ( user_id VARCHAR(50), chat_text VARCHAR(255), review_date DATE); โ€ป ์ฐธ๊ณ dateํ˜•์ผ ๊ฒฝ์šฐ YYYY-MM-DDtimeํ˜•์ผ ๊ฒฝ์šฐ HHH-MI-SSdatetimeํ˜•์ผ ๊ฒฝ์šฐ YYYY-MM-DD HH-MI-SS ํ˜•์ด ๋œ๋‹ค INSERT INTO chat_logs (user_id, chat_text, review_date) VALUES('ํ”ผ์นด์ธ„', '์•ˆ๋…•์•ˆ๋…•', '2024-01-01'),('ํ”ผ..
SQL์˜ ์œˆ๋„์šฐ ํ•จ์ˆ˜๋ž€ ํ–‰๊ณผ ํ–‰ ๊ฐ„์„ ๋น„๊ต, ์—ฐ์‚ฐ, ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜์ด๋‹ค. ๋ถ„์„ํ•จ์ˆ˜ ๋˜๋Š” ์ˆœ์œ„ํ•จ์ˆ˜๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค์ฒ˜๋Ÿผ ์ค‘์ฒฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ๋Š” ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.# ์œˆ๋„์šฐ ํ•จ์ˆ˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์œˆ๋„์šฐ ํ•จ์ˆ˜์—๋Š” OVER ๋ฌธ๊ตฌ๊ฐ€ ํ•„์ˆ˜๋กœ ๋“ค์–ด๊ฐ„๋‹ค.SELECT ์œˆ๋„์šฐํ•จ์ˆ˜ OVER([PARTITION BY ์ปฌ๋Ÿผ] [ORDER BY ์ปฌ๋Ÿผ]) [AS ๋ณ„์นญ]FROM ํ…Œ์ด๋ธ”๋ช…;    1. ์ˆœ์œ„ ํ•จ์ˆ˜ 1) ROW_NUMBER  ROW_NUMBER์€ ๋™์ผํ•œ ๊ฐ’์ด์–ด๋„ ๊ณ ์œ ํ•œ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค. (๋‹ค๋ฅธ ์ˆœ์œ„)SELECT JOB, ENAME, SAL, ROW_NUMBER() OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK FROM EMP;JOB ..
# MySQL์—์„œ Column์˜ ๊ฐ’์ด Null์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋“ค์€ IFNULL, IF & IS NULL, CASE์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋“ค์ด ์žˆ๋‹ค # ํ…Œ์ด๋ธ” ์˜ˆ์‹œselect *from country_student  # ifnull[ ํ˜•์‹ ]select ifnull( ์ปฌ๋Ÿผ๋ช…, null์ผ ๊ฒฝ์šฐ ๋Œ€์ฒด๊ฐ’ )from ํ…Œ์ด๋ธ”๋ช… [ ์˜ˆ์‹œ ]select id, name, age, country, ifnull(job, "์žก์ด ์—†์–ด์šฉ ใ… ใ… ") as jobfrom country_student [ ๊ฒฐ๊ณผ ]  # if ์™€ ์ปฌ๋Ÿผ is null[ ์˜ˆ์‹œ ]select id, name, age, country, if(job is null, "์žก์ด ์—†์–ด์šฉ ใ… ใ… ", job) as jobfrom country_student [ ๊ฒฐ..
# group by๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  https://anotherhound.tistory.com/38 [SQL] ์ง‘๊ณ„ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ - count(*), count(์ปฌ๋Ÿผ), ์ง‘๊ณ„ํ•จ์ˆ˜(์ปฌ๋Ÿผ)์˜ˆ์ „์—๋Š” ๊ทธ๋ƒฅ min, max, sum ๋“ฑ์˜ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ๋ชฉ์ ์„ฑ ์—†์ด ์‚ฌ์šฉํ–ˆ๋˜๊ฒƒ ๊ฐ™์€๋ฐ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€, ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋„์ถœ๋˜๋Š”์ง€ ์ •๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ ๋ณด์•˜anotherhound.tistory.com๋‚ด๊ฐ€ ์ด์ „์— ํ–ˆ๋˜ ํฌ์ŠคํŒ… ์ค‘ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ๋ณด๋ฉด count, avg, sum, max, min ์ง‘๊ณ„ํ•จ์ˆ˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์— ๋Œ€ํ•ด์„œ ๊ณ„์‚ฐ์„ ํ•ด์ฃผ์—ˆ๋‹ค.  ๊ทธ๋ ‡๋‹ค๋ฉด ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“ ํ–‰ ๋ง๊ณ !ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€ ํ–‰์— ๋Œ€ํ•ด์„œ๋งŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์„๊นŒ?GROUP BY + ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€ ํ–‰์„ ๋Œ€์ƒ์œผ๋กœ..
# WITH๋ฌธ์€ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?    ์‹ค์ œ ์‹ค๋ฌด์—์„œ๋Š” ๋™์ผํ•œ SQL์ด ๋ฐ˜๋ณต๋˜์–ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋•Œ๋งˆ๋‹ค ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ๋А๋ ค์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ๋ฐ˜๋ณต์ ์ธ ์‚ฌ์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ตฌ๋ฌธ์ด WITH ์ ˆ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ฒŒ์ž„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋งคํฌ๋กœ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•œ๋ฒˆ ์ง€์ •ํ•ด ์ฃผ๋ฉด ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜์—ฌ ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.    # with ๋ฌธ์˜ ๊ธฐ๋ณธ๊ตฌ์กฐwith new_table as( #๋ฐ˜๋ณต์‹œํ‚ฌ ์ฟผ๋ฆฌ SELECT )  WITH๋ฌธ ์šฐ์„  ์ƒ˜ํ”Œ๋กœ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ MEMBER ํ…Œ์ด๋ธ”์—์„œ ์กฐํšŒํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์กฐํšŒํ•  ํ•ญ๋ชฉ์€ ์„ฑ๋ณ„, ์ด๋ฆ„, ๋‚˜์ด์ž…๋‹ˆ๋‹ค.SELECT gender , name , age FROM MEMEBER;gend..
ํŒŒ์นดํŒŒ์˜ค
'Knowledge๐Ÿฆข/SQL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก