题目
查询表 Queries
:
将查询结果的质量 quality 定义为:
各查询结果的评分与其位置之间比率的平均值。
将劣质查询百分比 poor_query_percentage 为:
评分小于 3 的查询结果占全部查询结果的百分比。
编写一组 SQL 来查找每次查询的名称(query_name)、质量(quality) 和 劣质查询百分比(poor_query_percentage)。
质量(quality) 和劣质查询百分比(poor_query_percentage) 都应四舍五入到小数点后两位。
查询结果格式如下所示:
解题思路
1.题目要求我们查询结果的质量 quality 和劣质查询百分比 poor_query_percentage,题目的描述有点难理解,我们可以看示例就很容易明白了,quality 就是同一个 query_name 的所有 rating/position 的平均值,poor_query_percentage 就是同一个 query_name 下 rating < 3 占全部记录的比率。
2.首先我们按照 query_name 对记录进行分组,然后用avg()函数计算出 rating/position 的平均值,再用 round()函数保留两位小数就可以得出 quality,在求poor_query_percentage 我们首先使用"rating < 3"来筛选出小于3的评分,rating<3 用于判断,小于3就是返回1,否则返回0。avg求平均就跟把1和0求和再除以行数是一样的结果。然后,将这个平均值乘以100,即将百分比表示。最后,使用"ROUND()"函数来将结果四舍五入到两位小数。
代码实现
SELECT
query_name,
ROUND(avg(rating/position),2) quality,
ROUND(avg(rating < 3) * 100,2) poor_query_percentage
FROM Queries
GROUP BY query_name
测试结果