我希望每个人在这场疫情期间都过得很好。
我是一个初学者,这是我的第一个问题,所以,我为所犯的任何错误提前道歉。
我被要求计算至少参加过一次以上比赛的狗的前十名平均成绩。显示它们的名字、品种和平均得分。我正在努力实现这样的查询,任何帮助都将不胜感激。
为了让你有更多的了解,我正在使用以下表格:
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|
+-------+--------+---+