SQL 카타
문제 104. 619. Biggest Single Number
오답
select max(num)
from mynumbers
group by num
having count(*) = 1
싱글인 숫자 다 나와뻘임. 아침이라 잠이 제대로 덜 깬듯ㅋㅋ
정답
select max(num) as num
from mynumbers
where num in (select num
from mynumbers
group by num
having count(*)=1)
이미 수차례 복습해봤던 형식의 간단한 문제.
where in 으로 num에 대한 조건(중복되지 않음)을 걸어주고서, 그 중 최댓값만 출력해내면 되는 문제였다.
잠 덜 깼다고, 졸린다고 헷갈리지 않도록 기록!
문제 105. 1045. Customers Who Bought All Products : having 활용
select c.customer_id
from product p left join customer c using(product_key)
group by c.customer_id
having count(*) = (select count(product_key)
from product)
이렇게 하면 customer_id 중 모든 상품을 구매했으면서 동시에 각 상품을 중복으로 여러개 산 사람을 집계하지 못한다는 것을 간과했다.
정답
select customer_id
from customer
group by customer_id
having count(distinct product_key) = (select count(product_key) from product)
전에 group by와 having절에 다른 칼럼을 적었다가 불가능이라고 나왔던 것으로 기억해서 다른 방식만 생각하면서 한참을 쩔쩔매고 있었는데, 잘못 기억하고 있었던 것인지 슬쩍 solution을 봐보니 가능한 거였음.
group by로 그룹화한 칼럼에 딸려있는(?) 칼럼이면 having 절에 쓸 수 있다는 것을 제대로 깨달았다. 하
Python 코드카타
문제 9. 짝수의 합 : 리스트와 반복문 활용
정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
def solution(n):
sum = 0
for a in range(0, n+1, 2):
if a%2 == 0:
sum = sum+a
return sum
이전에 풀었던 문제긴 하지만, 잠시 헷갈렸기에 복기.
그리고 더 간단하게 풀 수 있는 방법이 없나 싶어서 일단 작성해보고 다른 정답들을 봐보기로 했다.
오답
def solution(n):
return sum((for i in range(0, n+1, 2))
다른 정답들을 보고서 작성해본 코드. 바로 오답이 났다.
정답
def solution(n):
return sum([i for i in range(0, n+1, 2)]) # 리스트 생성 시, 반복문 앞에 구성요소인 i 언급
*정답 주요 포인트
1)sum은 list에 대한 함수임.
2)반복문으로 리스트를 만들 때 반복문의 구성요소를 반복문 앞에서 따로 언급해주어야 함!
TMI
-새로운 조가 짜여졌고, 본격적으로 새 시작이다. 프로젝트까지 잘 되길!
-학부 때부터 대학원 때까지 양적 방법론도, 통계도 할 기회가 분명 없었던 게 아닌데. 나는 내가 뭐라고 비판 사회학, 역사사회학, 정치사회학만, 그것도 질방만 주구장창 파면서 통계는 들여다 보지도 않았던 것인가. 하...
일단 오늘 하루 종일 통계 기초 강의 필기하면서 전체적인 개요는 좀 잡힌 거 같은데 타임 스톤 하나 구해다가 과거로 돌아가고프다 꺼이꺼이.