[LeetCode-SQL 50] 1211. Queries Quality and Percentage

코린이·2025년 6월 2일

SQL 문제 풀이 (MySQL)

목록 보기
65/96

❓ 문제

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
;

🔗 Reference

https://leetcode.com/problems/queries-quality-and-percentage/description/?envType=study-plan-v2&envId=top-sql-50

0개의 댓글