Queries
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| query_name | varchar |
| result | varchar |
| position | int |
| rating | int |
+-------------+---------+
이 테이블에는 중복된 행이 있을 수 있습니다.
이 테이블에는 데이터베이스의 일부 쿼리에서 수집된 정보가 포함되어 있습니다.
position 열의 값은 1에서 500 사이입니다.
rating 열의 값은 1에서 5 사이입니다. 등급이 3 미만인 쿼리는 품질이 낮은 쿼리입니다.
쿼리 품질을 다음과 같이 정의합니다:
쿼리 등급과 해당 위치 사이의 비율의 평균입니다.
또한 불량 쿼리 비율을 다음과 같이 정의합니다:
등급이 3 미만인 모든 쿼리의 비율입니다.
각 쿼리 이름, quality 및 poor_query_percentage를 구하는 솔루션을 작성합니다.
quality과 poor_query_percentage는 모두 소수점 둘째 자리에서 반올림해야 합니다.
결과 테이블을 임의의 순서로 반환합니다.
SELECT A.query_name , ROUND(SUM(A.rating/position) / COUNT(A.query_name), 2) AS quality , IFNULL(ROUND((SELECT COUNT(query_name) FROM Queries WHERE rating < 3 AND query_name = A.query_name GROUP BY query_name) / COUNT(query_name) * 100, 2), 0) AS poor_query_percentage FROM Queries A WHERE 1=1 AND position BETWEEN 1 AND 500 GROUP BY A.query_name ; -- 다른 문제 풀이(해외 개발자 풀이) -- case when 사용 풀이 SELECT A.query_name , ROUND(SUM(A.rating/position) / COUNT(A.query_name), 2) AS quality , ROUND(SUM(CASE WHEN rating < 3 THEN 1 ELSE 0 END) / COUNT(A.query_name) * 100, 2) AS poor_query_percentage FROM Queries A WHERE 1=1 AND position BETWEEN 1 AND 500 GROUP BY A.query_name ;