essay

hot50-查找结果的质量和占比

#mysql

hot50——查找结果的质量和占比

Queries 表:

Column Name Type
query_name varchar
result varchar
position int
rating int

此表可能有重复的行。
此表包含了一些从数据库中收集的查询信息。
“位置”(position)列的值为 1 到 500 。
“评分”(rating)列的值为 1 到 5 。评分小于 3 的查询被定义为质量很差的查询。

将查询结果的质量 quality 定义为:

各查询结果的评分与其位置之间比率的平均值。

将劣质查询百分比 poor_query_percentage 定义为:

评分小于 3 的查询结果占全部查询结果的百分比。

编写解决方案,找出每次的 query_name 、 quality 和 poor_query_percentage。

quality 和 poor_query_percentage 都应 四舍五入到小数点后两位 。

以 任意顺序 返回结果表。

结果格式如下所示:

示例 1:

输入:
Queries table:

query_name result position rating
Dog Golden Retriever 1 5
Dog German Shepherd 2 5
Dog Mule 200 1
Cat Shirazi 5 2
Cat Siamese 3 3
Cat Sphynx 7 4

输出:

query_name quality poor_query_percentage
Dog 2.50 33.33
Cat 0.66 33.33

解释:
Dog 查询结果的质量为 ((5 / 1) + (5 / 2) + (1 / 200)) / 3 = 2.50
Dog 查询结果的劣质查询百分比为 (1 / 3) * 100 = 33.33

Cat 查询结果的质量为 ((2 / 5) + (3 / 3) + (4 / 7)) / 3 = 0.66
Cat 查询结果的劣质查询百分比为 (1 / 3) * 100 = 33.33

答:

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

解析:

  1. 分组 (GROUP BY query_name)
    将数据按 query_name(如 "Dog", "Cat")归类,后续的计算都是在这个“小团体”内部进行的。
  2. 计算质量 (quality)
  • rating/position:先算出每一行的比率。
  • AVG(...):再对这些比率求平均值。
  • ROUND(..., 2):最后保留两位小数。
  1. 计算劣质占比 (poor_query_percentage)
  • 分子:SUM(CASE WHEN rating < 3 THEN 1 ELSE 0 END)
    利用 CASE WHEN 将“评分<3”的行标记为 1,其他为 0,求和即得到劣质查询的数量。
  • 分母:COUNT(*)
    统计当前分组的总行数。
  • 计算:(分子 / 分母) * 100 得到百分比,并用 ROUND 保留两位小数。
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接