250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- leetcode문풀
- 프로그래머스
- sql문풀
- 데이터리안
- case문
- SQL테스트
- SQL
- if문
- UNION
- 코테
- 그로스해킹
- 문풀
- GROUPBY
- with절
- mysql
- 약수구하기
- 코딩테스트
- 파이썬
- 프로그래머스문풀
- leetcode
- 셀프조인
- 윈도우함수
- join
- 서브쿼리
- 위키독스
- 데이터분석
- SQL고득점KIT
- levle1
- 활성사용자수
- 파이썬문풀
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 그룹별 비율의 평균 구하기 본문
728x90
출처: [leetcode - SQL50] : 1211. Queries Quality and Percentage
문제: 쿼리평가와 순위간의 비율 평균, 안좋은 쿼리가 발생한 비율
1. CASE WHEN 활용하기
1) rating/position에 AVG를 사용하여 비율 평균 구하기
2) CASE구문으로 rating 3보다 작은 경우에는 1, 아닌경우 0을 부여한 후, AVG를 사용하여 평균 구하기
3) 계속 오류가 발생해서 확인해보니 query_name에 null이 있었다..!, where절에서 필터링하니 정답!
SELECT query_name
,ROUND(AVG(rating/position),2) AS quality
,ROUND(AVG(CASE WHEN rating <3 THEN 1 ELSE 0 END)*100,2) AS poor_query_percentage
FROM Queries
WHERE query_name IS NOT NULL
GROUP BY query_name
2. IF문 활용하기
1) 1번에서 CASE구문 대신 IF문을 사용해서 풀 수 있다
rating <3 작을 때는 첫번째 값인 1을 아닐 때는 0을 사용하는 방법이다.
SELECT
query_name,
round(avg(rating/ position), 2) AS quality,
round(avg(IF(rating < 3, 1, 0)) * 100, 2) AS poor_query_percentage
FROM Queries
WHERE query_name IS NOT NULL
GROUP BY query_name
728x90
'SQL > sql문풀' 카테고리의 다른 글
[MY SQL] 콘테스트별 참여비율 확인하기 (1) | 2024.09.25 |
---|---|
[MY SQL] 응시하지 않은 과목 0으로 표시하기 (1) | 2024.09.19 |
[MY SQL] 글자 수 세기(LENGTH VS CHAR_LENGTH) (0) | 2024.08.16 |
[MY SQL] 사용자에게 수신된 메세지 중 'confirmed' 한 메세지 비율 구하기 (0) | 2024.08.06 |
[MY SQL] 오프라인/온라인 데이터 통합하기(UNION) (0) | 2024.07.28 |