1211. Queries Quality and Percentage
这道题目不难,但是有很多需要考虑的点以及容易写错的地方。
SELECT query_name, ROUND(AVG(rating/position), 2) AS quality, ROUND(SUM(CASE WHEN rating < 3 THEN 1 ELSE 0 END) * 100 / COUNT(*), 2) AS poor_query_percentage FROM Queries GROUP BY query_name HAVING query_name IS NOT NULL;
问题出在第三行和最后一行,最后一行是因为可能存在query_name为null的情况,主键列通常不允许包含NULL值。
首先一起复习一下MySQL中的函数:
SUM():返回某列的和
AVG():返回某列的均值
COUNT():返回某列的行数
MAX(), MIN():返回某列的最大/小值
第三行中,计算劣质查询百分比,即评分小于3的查询结果占所有结果的百分比
评分小于3的数量可以用SUM和IF,如果rating小于3,那么数量加一,所有查询结果可以使用COUNT,因为要求的是百分比,所以需要乘以100.
SUM(IF(rating < 3), 1, 0)) * 100 / COUNT(*)
或者也可以使用AVG:
AVG(rating < 3) * 100
为了规范性,我们还是使用CASE WHEN:
AVG(CASE WHEN rating < 3 THEN 1 ELSE 0 END) * 100
或者麻烦一点写:
SUM(CASE WHEN rating < 3 THEN 1 ELSE 0 END) / COUNT(*) * 100
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix