查询表 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