미완
기초 SQL 학습 5일차
❇️ 오늘 배운 내용
1.
2.
3. 쿼리사관학교
주요 개념
오전 강의
| 결합 이어서
요약
- 결합
어제 배운 결합은 inner join임. 교집합만 가져오는 거.
오늘 배울 건 나머지 outer join으로, left right full
left 조인은 꽤 많이 쓰고
right 조인과 full 조인은 덜 씀.
select 열
from 기준 테이블명 inner join 부수적 테이블명
on g.GenreId = t.TrackId
그룹바이
오덜바이
;
select g.Name, count(track) as trackcount, sum(t.Milliseconds)
from genre g inner join track t
on g.GenreId = t.TrackId ;
where 상품3.상품분류 = '식료품';
이런 거 붙여서 특정 조건만 가져오는 것도 가능함.
on에 쓴 열만 합쳐주나¿¿ 앗 그 소리는 아니겠지 어 다른 것도 붙여주는데
- 프로덕트 선정
full outer join = union
전체를 다 출력할 때 쓰는 것
SELECT * from 테이블1 LEFT JOIN 테이블2 UNION SELECT * from 테이블1 RIGHT JOIN 테이블2
유니온은 기본적으로 중복되는 걸 없애줌.
만약 all union 했으면 열 7개 떴을 거임 다 떠서.
join이 예약어가 업는 이유는 많이 안써서? 자동완성에 안뜨는...
order by
group by
inner join
left join
right join
union
자동완성 안되는 것들
방법
- 자동완성 등록하는 법 찾기 - best
- 단축키 등록법 찾기
- 파이썬에서 그랬듯 기초 복붙 파일 만들어서 ㅇㅇ... 클립보드로다가...
? 이거 왜 먹힘 (이름이 ㅇㅇ)
답은 안나옴
ㄹㄹ
outer join Q2 해답
-- 나의 풀이 --
select a.Name , count(a2.AlbumId) as album_count , (select a2.Title from album a2
where a2.AlbumId = (select max(a2.AlbumId)
from album a2 where ArtistId = a.ArtistId group by a2.ArtistId)) as "최근 발매한 타이틀"
from artist a
left join album a2
on a.ArtistId = a2.ArtistId
group by a.ArtistId , a.Name
order by album_count desc, a.Name ;
-- 멘토님 풀이 --
SELECT
ar.Name AS ArtistName,
COUNT(al.AlbumId) AS AlbumCount,
(SELECT Title
FROM Album
WHERE ArtistId = ar.ArtistId
ORDER BY AlbumId DESC
LIMIT 1) AS LatestAlbum
FROM
Artist ar
LEFT JOIN
Album al ON ar.ArtistId = al.ArtistId
GROUP BY
ar.ArtistId, ar.Name
ORDER BY
AlbumCount DESC, ArtistName ASC;
-- 다른 분이 푼 것
select a1.Name , a2.countAlbum, a2.Title
from artist as a1
left join (select a.ArtistId, a.recentAlbumID, a.countAlbum, b.Title from
(select ArtistId, count(AlbumID) as countAlbum, max(AlbumId) as recentAlbumID
from album group by ArtistId ) as a
inner join album as b on a.recentAlbumID= b.AlbumID ) as a2
on a1.ArtistId = a2.ArtistID
order by a2.countAlbum desc, a1.Name asc ;
-- 강사님이 다른 분 풀이에 with 달아주신 것
with a as (select ArtistId, count(AlbumID) as countAlbum, max(AlbumId)
as recentAlbumID from album group by ArtistId )
select a1.Name , a2.countAlbum, a2.Title
from artist as a1
left join (select a.ArtistId, a.recentAlbumID, a.countAlbum, b.Title
from a
inner join album as b
on a.recentAlbumID= b.AlbumID ) as a2
on a1.ArtistId = a2.ArtistID
order by a2.countAlbum desc, a1.Name asc
우리 조 통칭 엑셀의 신이
최근 발매일 열이 없는데 앨범 아이디로 구하면 되냐고 하셔서
아하! 했음
나의 풀이법: max 씀 (원래 min 쓰다가 엑셀의 신이신 분이 max 쓰는 거 보고 앗 나의 실수 이러고 고침)
멘토님 풀이법: 숫자니까 정렬 사용
다른 분 풀이법: 엄청난... 참조...
--
어떤 점을 고쳤느냐
멘토님 풀이 보면서
그룹화에 아티스트아이디 넣음
그리고 where에 아티스트 = 하는 거 넣음
-- 이건 되고
select ArtistId, max(a2.AlbumId) from album a2 group by a2.ArtistId
-- 이건 안됨
select ArtistId, Title , max(a2.AlbumId) from album a2 group by a2.ArtistId
그래서
where ArtistId = a.ArtistId
넣어야겠다고 생각함...
풀긴 풀엇는데 개념과 원리가 좀 헷갈림;;
기준열이 필요하겠구나 알겟는데 왜 필요한건데
ㄹㄹ
LAG 예제
SELECT
YEAR(InvoiceDate) as Year,
MONTH(InvoiceDate) as Month,
SUM(Total) as MonthlyTotal,
LAG(SUM(Total)) OVER (ORDER BY YEAR(InvoiceDate), MONTH(InvoiceDate)) as PreviousMonthTotal,
SUM(Total) - LAG(SUM(Total)) OVER (ORDER BY YEAR(InvoiceDate), MONTH(InvoiceDate)) as MonthOverMonthChange
FROM Invoice
GROUP BY YEAR(InvoiceDate), MONTH(InvoiceDate)
ORDER BY Year, Month;
프로덕트 선정
- Data 기억하기
CREATE VIEW view이름 AS
SELECT 문
CREATE VIEW customer_custom AS
SELECT custmer ;
CREATE VIEW과 with의 차이?
가상의 테이블과 서브쿼리의 차이?
가상의 테이블을 from에 불러올 수 있는데 업데이트 삭제 등을 못함.
다른 테이블과 같은 이름을 가질 수 없음.
- 프롬프트 엔지니어링 Tip, RAG의 개념 알기
우리가 쓰는 데이터셋은 이거고 데이터는 이렇게 생겼다 이런 특성이 있다.
이러면서 명령을 잘해야 함
인공지능/LLM에게 명령을 잘하는 기술을 바로 "프롬포트 엔지니어링"이라고 함
예를 들어
~하는 sql문 알려줘 보다는
우리 데이터가 이런 형태고 이런 걸 만들려고 하는데,
mysql 쿼리로 알려줘
PDF에 예시는 영어지만 요즘은 한글로도 인스트록션 작성 가능함.
오후 강의
| 소제목
요약
- 프로덕트 선정
ㅀㅎ
ㅇㅀㅇ
| 개인 경험 정리 - 이력서, 자소서 용
요약 생략?
- 프로덕트 선정
- 프로덕트 선정
- 프로덕트 선정
- 프로덕트 선정
불-편
원형 눌러서 데이터 계열 서식 누르면 저기서 조정 가능함.
근데 계열 분할이 위치다 보니 이렇게 불편한 사태가 초래함.
백분율 값으로 고침.
여전히 보기 불편한데,
분할을 2개 이상 못하나?
색깔 지저분한데 하나하나 바꾸는 수밖에 없나?
0%인 거 못 빼나?
갯
경험 2번 | |
시기 | 2021년 8월 |
WHAT | 연속 아카데미 사업 데이터 총정리 및 인사이트 도출 |
WHY | |
HOW | |
WHAT | |
HOW |
여담
https://chatgpt.com/share/1c1bd51c-abe7-43ab-91a0-27662ffeaccb
[회고]
어 ㅋㅋ 기술블로그 시간에 9번 푼다고 못했다 ㅋㅋ
9번은 좀 어려운 내용이라 패스하셨고 각자 풀어보라고 하셨는데
하 각 고객별 젤 높은 거 1개만 나오게 하면 되는데 아!
오늘은 약속 있으니 낼 ㄱㄱ다
#청년취업사관학교 #데이터분석가 #데이터분석가부트캠프 #DA교육 #데이터분석교육 #실무프로젝트 #실무경험 #취업포트폴리오 #포트폴리오 #취업연계교육 #코멘토 #모비니티
'새싹 데이터 분석 교육 (24.05.13~24.08.16) > TIL' 카테고리의 다른 글
SQL 데이터 분석 프로젝트 2일차 - 0712 (7) | 2024.07.14 |
---|---|
[성동2기 전Z전능 데이터 분석가] 0711 (1) | 2024.07.11 |
[성동2기 전Z전능 데이터 분석가] 0709 (1) | 2024.07.09 |
[성동2기 전Z전능 데이터 분석가] 0708 (미완) (1) | 2024.07.08 |
[성동2기 전Z전능 데이터 분석가] 0705 (미완) (0) | 2024.07.08 |