- 조건에 맞는 사용자 정보 조회하기
SELECT u.user_id
, u.nickname
, concat(u.city,' ', u.STREET_ADDRESS1,' ', u.STREET_ADDRESS2) '전체주소'
, concat(substr(u.tlno,1,3),'-',substr(u.tlno,4,4),'-',substr(u.tlno,8)) '전화번호'
from USED_GOODS_USER u
join(
select count(*) as uc
, writer_id
from USED_GOODS_BOARD
group by writer_id
) s
on s.writer_id=u.user_id
where s.uc >= 3
order by u.user_id desc
🙄아ㄴ ㅣ........이거 저번에 왜틀린지 도저히 모르겠어서 500번 고민하다가 skip하고 넘어갔던거 다시 봤는데... 공백때문이었다........ 코드실행했을 때는 u.STREET_ADDRESS1랑 u.STREET_ADDRESS2 사이에 저절로 공백이 생기는 것 같길래 안넣었는데...
스페이스바 한번에 풀릴줄이야....
(이게 실제로 코테시험이었다면....아찔하다..........................)
- USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
select s.YEAR
,s.Month
,s.gender
,sum(s.cnt_user) 'users'
from ( select Year(o2.sales_date) 'YEAR',
Month(o2.sales_date) 'Month',
u2.gender 'gender',
count(distinct o2.user_id) as cnt_user
from online_sale o2
join user_info u2
on o2.user_id=u2.user_id
where u2.gender is not null
group by 1,2,3
) s
group by 1,2,3
order by 1,2,3,4
🔺최종 정답 쿼리
❌겪었던 오류 & 원인
: distinct
를 사용하지 않아 상품을 구매한 회원 수
가 중복 집계됨.
레벨이 낮은 문제들에서는, 중복없이 집계하는 것을 문제에서 명시해줬어서 distinct를 사용하는 것에 대해 능동적으로 사고해볼 기회가 많지 않았다.
그래서 문법적으로는 전혀 오류가 없어서 샘플 추출은 잘되었기에.. 채점에서 자꾸 틀리는 원인을 파악하지 못했다.
서브쿼리만 돌려보고.. 본쿼리 포함해서 돌려보고.. 다 잘 작동되는데 왜?!! 틀린거지!! \
.
문제만 10분동안 다시 해석했다..
총 구매횟수를 구하는 것이면 중복도 허용되었겠지만, 여러번 결제했다고 회원수가 늘어나는 것은 아니니.. 와 이거 설마 distinct 써야되나??? 하고 돌려보니까 바로 정답이 떴다...
뭔가 나에게 엄청 교훈을 준 문제고 이걸 60번까지 풀고나서야.. 깨달음을 얻은 나도.. 너무 기계적으로 문제만 풀었나..싶기도 하다..(앞으로 안그러면 되지💭)
오늘은 30분정도 지난 수업복습을 하고
디비버로 실습하면서 요리조리 질문을 던져주셨다
열심히 적으면서 수업 화면 보고있었는데,
친절하신 튜터님,,수업끝나고 쿼리 그대로 올려주셨다...!
#inner join
select count(distinct a.game_account_id)
, count(distinct b.game_account_id)
from basic.users a
inner join basic.payment b
on a.game_account_id =b.game_account_id
#모순
#where a.game_account_id is null
;
#left join
select count(distinct a.game_account_id)
, count(distinct b.game_account_id)
from basic.users a
left join basic.payment b
on a.game_account_id =b.game_account_id
#모순
#where b.game_account_id is null
#inner join 과 결과가 같습니다.
#where b.game_account_id is not null
.
.
.
다시한번 중요내용 빠르게 복기해보자면 ~!
✅union
- 수직결합
- 개수, 이름, 순소 모두 =
- 각 테이블에 where, group by etc 가능
대신, order by는 맨마지막 줄에 작성
✅join
- 가로결합
- 컬럼 이름 달라도 됨
- 공통 컬럼 2개 이상인데 하나만 적어도 ok이긴함,
근데 2개 필요하면 2개 and로 병렬작성해줘야함
(where처럼 조건이 들어가는 느낌이라 답은 다르게 나올 수 있음)- PK: 기준 컬럼 <null값 없어야함> <유일해야함(중복X)>
(한국/중국/일본/미국 ... (⭕) ) -- ( 한국/중국/한국... (❌) )- FK: 기준 컬럼 아님
오늘 내용 최종 마무리하고,
ppt제작 하고
내일 발표 준비를 해야했다.
구체적인 자료구성과 흐름을 짜느라 시간이 조금 걸려서
이제야 ppt가 어느정도 마감 되었다.
로직트리로 잘 시각화 하면서 발표 진행해야겠다.
(약간 느낀점 같긴한데,
팀원 모두 열심히 준비한 한주라서 내가 내일 잘 마무리 지을 수 있으면 좋겠다. 끝나면 너무 개운할 것 같다)
2주차인데 과제에 대한 체감이 little bit hard한데 살짝 burden같고
아니 근데 또 그 중간중간 재미와 쾌감이 있단 말이지.
더 많이 작성하고 실수해보는 경험+ 데이터를 접하고 만져본 경험을 쌓아서
잘한 분석(?)이 아니라, 전문성이 느껴지게 하고싶다.
지금은 아직.. 공모전 입상작..? 정도?..(그 이하일수도있지만~)
앞으로도 열심히 하겠단 말이지, 뭐.
자취 2년 하면서 집안일 한 번도 밀려본 적이 없는데,
요즘 좀 밀렸다..얼른 대본 짜고 밀린 일도 해야지🥱
일단 분리수거는 먼저 하고와야겠다.