使用MySql计算AVG并在狗展数据库中显示前10名得分



我希望每个人在这场疫情期间都过得很好。

我是一个初学者,这是我的第一个问题,所以,我为所犯的任何错误提前道歉。

我被要求计算至少参加过一次以上比赛的狗的前十名平均成绩。显示它们的名字、品种和平均得分。我正在努力实现这样的查询,任何帮助都将不胜感激。

为了让你有更多的了解,我正在使用以下表格:

ENTRIES TABLE
id | competition_id | dog_id | score 
1          15            1       3
2           8            3       9
3           8            1       7
4          13            3       6

狗表

id  |  name  |  breed_id 
1     Kieran      1
2     Alexa       2
3     Leah        3
4     Sonia       4

品种表

id  |  name
1     Bulldog
2     Chihuahua
3     Terrier
4     Mastiff

这些是我使用的表格

CREATE TABLE Entries
(`id` varchar(255), `competition_id` varchar(255), `dog_id` varchar(50), `score` varchar(50))
;

INSERT INTO Entries
(`id`, `competition_id`, `dog_id`, `score`)
VALUES
(1, 15, 1, 3),
(2, 8, 3, 9),
(3, 8, 1, 7),
(4, 13, 3, 6)
;
create table Dogs
(`id` varchar(255), `name` varchar(255), `breed_id` varchar(255));

insert into Dogs
(`id`, `name`, `breed_id`)
values
(1, 'Kieran', 1),
(2, 'Alexa', 2),
(3, 'Leah', 3) ,                                   
(4, 'Sonia', 4);                                    
create table Breeds
(`id` varchar(255), `name` varchar(255));

insert into Breeds
(`id`, `name`)
values
(1, 'Bulldog'),
(2, 'Chihuahua'),
(3, 'Terrier') ,                                   
(4, 'Mastiff');          

此查询将显示在一场以上比赛中得分的狗的平均值,按狗的品种分组。

select trainer, breed, score
from
(select Breeds.id as id, Dogs.name as trainer, Breeds.name as breed, avg(score) as score, count(Breeds.id) as count
from Entries
join Breeds on Entries.dog_id = Breeds.id
join Dogs on Breeds.id = Dogs.breed_id
group by breed
order by count)x
where count >= 2
group by breed
;

结果

+-------+--------+---+
| Kieran| Bulldog|  5|
+-------+--------+---+
|   Leah| Terrier|7.5|
+-------+--------+---+

最新更新