1211. Queries Quality and Percentage

최지웅·2025년 7월 24일

LeetCode

목록 보기
36/37

초안은 다음과 같다.

# Write your MySQL query statement below
# 중복데이터 존재하며, 쿼리응답DB 테이블이다.
# position은 1~500, rating은 `~5이다. 1~2는 poor query로 분류한다.
# 계산해야하는 quality는 rating과 position의 평균 비율이다.
# 계산해야하는 poor_query_percentage는 rating이 3 미만인 쿼리의 비율이다.
# 결과 테이블은 query_name, quality, poor_query_percentage로 구성되어야 한다.
# 모든 비율은 소수점 2자리까지 출력한다.
# 순서상관없이 출력한다.
SELECT q.query_name, ROUND(AVG(q.rating/q.position),2) as quality, ROUND(SUM(IF(q.rating<3, 1, 0))/COUNT(q.rating)*100,2) as poor_query_percentage
FROM Queries as q
GROUP BY q.query_name
;

너무 쉽게 통과됐으니 다른 사람의 코드도 보자.

# Write your MySQL query statement below

SELECT query_name, ROUND(AVG(rating / position), 2) AS quality,
ROUND(SUM(CASE WHEN rating < 3 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS poor_query_percentage 
FROM Queries 
GROUP BY query_name

나와 달리 IF가 아닌 CASE를 사용했는데, C언어와 유사하게 여러 조건이 있을 경우 사용할 수 있다.
CASE WHEN (조건) THEN (조건이 참일 경우 값) ELSE (조건이 거짓일 경우 값) END 문법으로
여러 조건을 사용할 수 있다.
이 때 햇갈리지 말아야할 점은 else if는 사용하지 않는다! 이건 CASE이기에 아래의 문법을 따른다.

CASE
    WHEN 조건1 THEN 결과1        -- if
    WHEN 조건2 THEN 결과2        -- else if
    WHEN 조건3 THEN 결과3        -- else if
    ...
    ELSE 기본결과               -- else
END

ELSE의 사용으로 CASE?IF?햇갈리지만 C언어의 default: 로 이해하면 될 듯 하다.
구체적인 문법의 사용은 이 문제에서 필요하지 않지만(조건이 1개이기에) 여러 조건이 있을 경우 SQL에서 CASE~WHEN~THEN~END로 사용이 가능함을 인지하고 있으면 좋을 듯 하다.

profile
이제 4학년!!!

0개의 댓글