赞
踩
查询表 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 的查询结果占全部查询结果的百分比。
编写一组 SQL 来查找每次查询的名称
(query_name
)、质量
(quality
) 和 劣质查询百分比
(poor_query_percentage
)。
质量
(quality
) 和劣质查询百分比
(poor_query_percentage
) 都应四舍五入到小数点后两位。
SQL架构:
- Create table If Not Exists Queries (query_name varchar(30), result varchar(50), position int, rating int)
- Truncate table Queries
- insert into Queries (query_name, result, position, rating) values ('Dog', 'Golden Retriever', '1', '5')
- insert into Queries (query_name, result, position, rating) values ('Dog', 'German Shepherd', '2', '5')
- insert into Queries (query_name, result, position, rating) values ('Dog', 'Mule', '200', '1')
- insert into Queries (query_name, result, position, rating) values ('Cat', 'Shirazi', '5', '2')
- insert into Queries (query_name, result, position, rating) values ('Cat', 'Siamese', '3', '3')
- insert into Queries (query_name, result, position, rating) values ('Cat', 'Sphynx', '7', '4')
该题考察的是对于一些函数的运用:
SUM,ROUND,COUNT,AVG
还用到了条件语句。
我的思路:
1.名字分组,分别计算需要的2个值(质量和劣质百分比)
2.质量的计算:分组后的总质量/总个数,即sum(rating/position)/count(*)
3.劣质百分比的计算:分组后的总劣质数*100/总个数,即sum(if(rating<3,1,0))*100/count(*)
4.round函数四舍五入到小数点后2位
- select
- query_name,
- round((sum(rating/position)/count(*)),2) quality,
- round(sum(if(rating<3,1,0))*100/count(*),2) poor_query_percentage
- from queries
- group by query_name
看到别人用AVG,更简洁明了:
- select
- query_name,
- round(avg(rating/position),2) quality,
- round(avg(if(rating<3,1,0))*100,2) poor_query_percentage
- from queries
- group by query_name
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。