👩🏻💻 TODAY I LEARN
📌 SQL
- 코드카타 제한시간 두고 풀기
📌 Python
- 종합반 강의 3주차
- 코드카타
1. SQL
1-1. 코드카타 제한시간 두고 풀기
1) 코드카타 95번
방법1. 서브쿼리 ⭐️⭐️
SELECT q.query_name
,ROUND(AVG(q.rating/q.position),2) quality
,ROUND((
SELECT COUNT(*) FROM queries q2
WHERE
rating < 3
AND q.query_name = q2.query_name
GROUP BY query_name) / COUNT(*)*100,2) poor_query_percentage
FROM queries q
GROUP BY 1
⭐️ 중요 !!!
반드시 q.query_name = q2.query_name 조건을 줘야한다.
이유 : 서브쿼리에서 추출되는 count(*)가 query_name 별로 나와야하기 때문
이 방법을 몰라서 rating < 3 일 때와 전체일 때를 각각의 서브쿼리로 만들어서 조인시키고,
거기서 나누기 해줬다. 하면서도 이거 더 짧게 쓸 수 있을 거 같은데.. 싶었는데
일단 내가 생각하는 방향이 논리적으로 맞는지 확인해보고 싶어서 계속 이어갔다.
select
aa.query_name,
aa.quality,
bb.dd
from
(select
query_name,
round(avg(rating/positions),2) as quality
from queries
group by 1) aa
join
(
select a.query_name, round(a.cnt_less3 / b.cnt_all * 100,2) as dd
from
(select
query_name,
count(1) cnt_less3
from queries
where rating < 3
group by 1) a
join
(select
query_name,
count(1) cnt_all
from queries
group by 1) b
on a.query_name = b.query_name) bb
on aa.query_name = bb.query_name
정말 길디 길고 길디 긴 쿼리 등장 ..
논리적으로 맞긴 맞았음..

☑️ 결론
그룹핑이 필요없는 count 였으면 그냥 바로 cross join 시켜도 되지만,
이 문제는 그룹별로 count해야 한다.
- 때문에 query_name이 일치하는 애들끼리 join 시켜야 하고
- 그 방법은 스칼라 서브쿼리 안에서 조건으로 묶어주면 된다.
"메인 쿼리 테이블의 query_name 과 서브쿼리 테이블의 query_name이 일치하면 값을 집어넣어줘"
방법2. 'rating < 3 then 1 else 0' 칼럼 생성
SELECT
query_name,
ROUND(AVG(rating/position),2) AS quality,
ROUND(SUM(IF(rating < 3, 1,0)) / count(1) * 100, 2) AS poor_query_percentage
FROM queries
GROUP BY query_name
"rating < 3 이면 1 아니면 0을 출력하고,
그걸 query_name 별로 sum해줘. (rating < 3 조건을 만족하는 수)"
조건이 TRUE이면 1, FALSE이면 0 값을 집어 넣어서 count하는 방법
2. Python
2-1. 종합반 강의 3주차
1) if 조건문
2) for ~ in 반복문
3) while문
2-2. 코드카타
1) 나눗셈
- 나누기 : /
- 몫 : //
- 나머지 : %
🔶 예시



2) 리스트 평균 구하는 방법
방법1. sum 함수 사용하기
def solution(numbers):
return sum(numbers) / len(numbers)
❌ 혹시 avg 사용할 수 있나 했지만 -> 사용 불가
⭕️ 리스트 전체 sum 하고, len 함수 이용해서 항목 개수 구해준 후 나눠주었다.
방법2. 반복문으로 sum하기
def solution(numbers):
answer = 0
for i in numbers:
answer += i
return answer/len(numbers)
"answer 이라는 변수를 만들어주고,
값을 반복해서 더해주면서 전체 sum 값을 구함."
반복문 활용해보았다.
이 문제에서는 쉬운 응용이지만 이런 변수 지정하는 연습을 많이 해줘야할 듯.
'데이터 분석' 카테고리의 다른 글
| [day25] SQL : Python = 1 : 9 (0) | 2025.03.12 |
|---|---|
| [day24] 중꺾그마...? (0) | 2025.03.11 |
| [day21] 3주차 WIL (1) | 2025.03.08 |
| [day20] 다양한 쿼리를 많이 접해보자. (0) | 2025.03.07 |
| [day1] 퍼포먼스 마케터 직무 조사 (0) | 2025.02.17 |