https://leetcode.cn/problems/queries-quality-and-percentage/
一,题目介绍
二,建表语句如下
Create table If Not Exists Queries (query_name varchar(30), result varchar(50), position int, rating int);
Truncate table Queries;
insert into Queries (query_name, result, position, rating) values ('Dog', 'Golden Retriever', '1', '5');
insert into Queries (query_name, result, position, rating) values ('Dog', 'German Shepherd', '2', '5');
insert into Queries (query_name, result, position, rating) values ('Dog', 'Mule', '200', '1');
insert into Queries (query_name, result, position, rating) values ('Cat', 'Shirazi', '5', '2');
insert into Queries (query_name, result, position, rating) values ('Cat', 'Siamese', '3', '3');
insert into Queries (query_name, result, position, rating) values ('Cat', 'Sphynx', '7', '4');
三,解题思路如下
-
理解查询目标:
首先,需要理解查询的目的,即计算每个查询的平均质量(
quality
)和低质量查询的百分比(poor_query_percentage
)。 -
分析表结构:
了解
queries
表的结构,特别是query_name
、rating
和position
字段的含义和数据类型。 -
处理NULL值:
确定是否需要处理
NULL
值,以及如何处理。在本例中,WHERE
子句已经排除了query_name
为NULL
的记录。 -
计算平均质量:
计算每个查询的平均质量,即评分(
rating
)与位置(position
)的比值。这需要使用AVG
函数来计算平均值,并使用ROUND
函数来限制小数点后的位数。 -
计算低质量查询的百分比:
确定评分低于3的查询为低质量查询。使用
CASE WHEN
语句来为评分低于3的查询分配1,否则分配0,然后计算这些1的平均值,即低质量查询的百分比。
四,答案如下:
select
query_name as query_name ,
round(avg(rating/position),2) as quality,
round(avg(rating<3)*100,2) as poor_query_percentage
from queries
group by query_name;