#mysql #phpmyadmin
#mysql #phpmyadmin
Вопрос:
Я надеюсь, что у всех все хорошо во время этой пандемии.
Я новичок, и это мой первый вопрос, поэтому я заранее приношу извинения за любую допущенную ошибку.
Меня просят рассчитать 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
Ответ №1:
Это таблицы, которые я использовал
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|
------- -------- ---
Комментарии:
1. Это действительно отличный способ реализовать это, спасибо!