查询质量和劣质查询占比
LeetCode 1211 · 比值的平均、条件占比
面试怎么回答
按 query_name 分组,质量是 ROUND(AVG(rating / position), 2),劣质占比是 ROUND(AVG(rating < 3) * 100, 2)。「比值的平均」和「平均的比值」是两个口径,写之前要看清定义。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
题意
查询表记录每次查询的名称、结果、位置和评分。对每个查询名称计算两个指标:质量 = 每条记录「评分 / 位置」的平均值;劣质占比 = 评分小于 3 的记录所占百分比。都保留两位小数。
表结构
- Queries:query_name、result、position(1 到 500)、rating(1 到 5);没有主键
思路
按查询名称分组,质量是 AVG(rating / position),注意是先对每行求比值再平均,而不是平均评分除以平均位置;劣质占比是条件计数除以总数再乘 100。
参考解法
select query_name,
round(avg(rating/position),2) quality,
round(sum(if(rating<3,1,0))/count(*)*100,2) poor_query_percentage
from Queries
group by query_name
易错点
- 把 AVG(rating) / AVG(position) 当成质量,口径完全不同。