โ
๊ณผ์ 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..
Knowledge๐ฆข/SQL
# 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..