LeetCode:Database 69.查询结果的质量和占比

Posted Xiao Miao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:Database 69.查询结果的质量和占比相关的知识,希望对你有一定的参考价值。

要求:编写一组 SQL 来查找每次查询的名称(query_name)、质量(quality) 和 劣质查询百分比(poor_query_percentage)。

质量(quality) 和劣质查询百分比(poor_query_percentage) 都应四舍五入到小数点后两位。

查询表 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 的查询结果占全部查询结果的百分比。

Queries 表:

+------------+-------------------+----------+--------+
| 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      |
+------------+-------------------+----------+--------+

Result Table:

+------------+---------+-----------------------+
| 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

SQL语句:

select a.query_name,a.quality,round(ifnull(b.c2,0)/a.c1*100,2) as poor_query_percentage
from(
select query_name,round(avg(rating/position),2) as quality,count(*) as  c1
from queries
group by query_name
)a
left join (
select query_name,count(*) as c2 from queries
where rating<3
group by query_name)b 
on a.query_name=b.query_name;

以上是关于LeetCode:Database 69.查询结果的质量和占比的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:Database 70.查询球队积分

LeetCode:Database 19.查询员工的累计薪水

LeetCode:Database 79.求团队人数

LeetCode:Database 51.每位学生的最高成绩

LeetCode:Database 80.不同性别每日分数总计

LeetCode:Database 21.统计各专业学生人数