使用 MySql 计算 AVG 并显示狗展数据库中的前 10 个分数
Calculating AVG and displaying top 10 score within a dog show database using MySql
希望大家在疫情期间一切都好。
我是初学者,这是我的第一个问题,所以对于任何错误,我提前表示歉意。
我被要求计算前 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
狗TABLE
id | name | breed_id
1 Kieran 1
2 Alexa 2
3 Leah 3
4 Sonia 4
品种TABLE
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');
此查询将仅显示在超过 1 场比赛中得分的狗的平均值,按犬种分组。
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|
+-------+--------+---+
希望大家在疫情期间一切都好。
我是初学者,这是我的第一个问题,所以对于任何错误,我提前表示歉意。
我被要求计算前 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
狗TABLE
id | name | breed_id
1 Kieran 1
2 Alexa 2
3 Leah 3
4 Sonia 4
品种TABLE
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');
此查询将仅显示在超过 1 场比赛中得分的狗的平均值,按犬种分组。
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|
+-------+--------+---+