|
|
/*
|
|
|
=> TP 2, Fréville Clément G8
|
|
|
*/
|
|
|
|
|
|
-- 1. Nombre d’athlètes par pays.
|
|
|
SELECT p.nom pays, COUNT(*) athletes FROM athlete a
|
|
|
INNER JOIN pays p ON p.code = a.pays
|
|
|
GROUP BY p.code;
|
|
|
/*
|
|
|
pays | athletes
|
|
|
----------------------------------+----------
|
|
|
Ethiopia | 37
|
|
|
Kuwait | 10
|
|
|
Denmark | 108
|
|
|
Nauru | 2
|
|
|
Netherlands | 283
|
|
|
Palau | 3
|
|
|
Samoa (until 1996 Western Samoa) | 8
|
|
|
United Arab Emirates | 5
|
|
|
[...]
|
|
|
*/
|
|
|
|
|
|
-- 2. Nombre d’épreuves par discipline.
|
|
|
SELECT d.nom discipline, COUNT(*) nombre_epreuves FROM epreuve e
|
|
|
INNER JOIN discipline d ON d.code = e.discipl
|
|
|
GROUP BY d.code;
|
|
|
/*
|
|
|
discipline | nombre_epreuves
|
|
|
-----------------------+-----------------
|
|
|
Equestrian | 6
|
|
|
Taekwondo | 8
|
|
|
Hockey | 2
|
|
|
Volleyball | 2
|
|
|
Sport Climbing | 2
|
|
|
Skateboarding | 4
|
|
|
Handball | 2
|
|
|
Baseball/Softball | 2
|
|
|
Diving | 8
|
|
|
[...]
|
|
|
*/
|
|
|
|
|
|
-- 3. Date de la dernière épreuve de chaque discipline.
|
|
|
SELECT d.nom, to_char(MAX(e.dateE), 'dd/mm/YYYY') derniere_epreuve FROM epreuve e
|
|
|
INNER JOIN discipline d ON d.code = e.discipl
|
|
|
GROUP BY d.code;
|
|
|
/*
|
|
|
nom | derniere_epreuve
|
|
|
-----------------------+------------------
|
|
|
Equestrian | 07/08/2021
|
|
|
Taekwondo | 27/07/2021
|
|
|
Hockey | 06/08/2021
|
|
|
Volleyball | 08/08/2021
|
|
|
Sport Climbing | 06/08/2021
|
|
|
Skateboarding | 05/08/2021
|
|
|
Handball | 08/08/2021
|
|
|
Baseball/Softball | 07/08/2021
|
|
|
[...]
|
|
|
*/
|
|
|
|
|
|
-- 4. Date de naissance du plus jeune athlète par discipline et par sexe.
|
|
|
SELECT d.nom discipline, a.sexe, MAX(a.dateNaiss) date_naissance_plus_jeune FROM athlete a
|
|
|
INNER JOIN pratiquer p ON p.athlete = a.code
|
|
|
INNER JOIN discipline d ON p.discipl = d.code
|
|
|
WHERE a.dateNaiss IS NOT NULL
|
|
|
GROUP BY d.code, a.sexe;
|
|
|
/*
|
|
|
discipline | sexe | date_naissance_plus_jeune
|
|
|
-----------------------+------+---------------------------
|
|
|
Basketball | M | 2002-03-09
|
|
|
Water Polo | F | 2004-10-29
|
|
|
Water Polo | M | 2003-06-02
|
|
|
Athletics | M | 2004-01-29
|
|
|
Rhythmic Gymnastics | F | 2004-11-29
|
|
|
Equestrian | F | 1998-08-19
|
|
|
Modern Pentathlon | M | 2000-03-01
|
|
|
Triathlon | M | 1999-10-07
|
|
|
Hockey | M | 2002-03-19
|
|
|
Football | M | 2003-07-24
|
|
|
Swimming | M | 2005-07-19
|
|
|
[...]
|
|
|
*/
|
|
|
|
|
|
-- 5. Nombre total de médailles par pays, les pays ayant remporté le plus de médailles en premier.
|
|
|
SELECT p.nom pays, COUNT(*) medailles_remportees FROM resultat r
|
|
|
INNER JOIN athlete a ON a.code = r.athlete
|
|
|
INNER JOIN pays p ON p.code = a.pays
|
|
|
GROUP BY p.code
|
|
|
ORDER BY medailles_remportees DESC;
|
|
|
/*
|
|
|
pays | medailles_remportees
|
|
|
----------------------------+----------------------
|
|
|
United States of America | 295
|
|
|
ROC | 147
|
|
|
People's Republic of China | 140
|
|
|
France | 137
|
|
|
Japan | 131
|
|
|
Great Britain | 130
|
|
|
Australia | 129
|
|
|
Canada | 82
|
|
|
[...]
|
|
|
*/
|
|
|
|
|
|
-- 6. Nombre de médailles d’or par pays, les pays ayant remporté le plus de médailles en premier.
|
|
|
SELECT p.nom pays, COUNT(*) medailles_or_remportees FROM resultat r
|
|
|
INNER JOIN athlete a ON a.code = r.athlete
|
|
|
INNER JOIN pays p ON p.code = a.pays
|
|
|
WHERE r.medaille = 1
|
|
|
GROUP BY p.code, r.medaille
|
|
|
ORDER BY medailles_or_remportees DESC;
|
|
|
/*
|
|
|
pays | medailles_or_remportees
|
|
|
----------------------------+-------------------------
|
|
|
United States of America | 112
|
|
|
Japan | 68
|
|
|
France | 65
|
|
|
People's Republic of China | 58
|
|
|
ROC | 40
|
|
|
Great Britain | 39
|
|
|
Australia | 36
|
|
|
Canada | 36
|
|
|
Netherlands | 31
|
|
|
Brazil | 29
|
|
|
[...]
|
|
|
*/
|
|
|
|
|
|
-- 7. Même question, mais uniquement les pays ayant remporté plus de 30 médailles d’or
|
|
|
SELECT p.nom, COUNT(*) medailles_or_remportees FROM resultat r
|
|
|
INNER JOIN athlete a ON a.code = r.athlete
|
|
|
INNER JOIN pays p ON p.code = a.pays
|
|
|
WHERE r.medaille = 1
|
|
|
GROUP BY p.nom, r.medaille
|
|
|
HAVING COUNT(*) >= 30
|
|
|
ORDER BY medailles_or_remportees DESC;
|
|
|
/*
|
|
|
nom | medailles_or_remportees
|
|
|
----------------------------+-------------------------
|
|
|
United States of America | 112
|
|
|
Japan | 68
|
|
|
France | 65
|
|
|
People's Republic of China | 58
|
|
|
ROC | 40
|
|
|
Great Britain | 39
|
|
|
Australia | 36
|
|
|
Canada | 36
|
|
|
Netherlands | 31
|
|
|
*/
|
|
|
|
|
|
-- 8. Athlètes (code, nom, prénom, code du pays) pratiquant plusieurs disciplines.
|
|
|
SELECT a.code, a.nom, a.prenom, a.pays
|
|
|
FROM pratiquer p
|
|
|
INNER JOIN athlete a ON a.code = p.athlete
|
|
|
GROUP BY a.code, a.nom, a.prenom, a.pays
|
|
|
HAVING COUNT(*) > 1;
|
|
|
/*
|
|
|
code | nom | prenom | pays
|
|
|
--------+----------------+------------+------
|
|
|
A05315 | KOPECKY | Lotte | BEL
|
|
|
A01327 | BRENNAUER | Lisa | GER
|
|
|
A07786 | PALTRINIERI | Gregorio | ITA
|
|
|
A05148 | KIRPICHNIKOVA | Anastasiia | ROC
|
|
|
A02686 | DYGERT | Chloe | USA
|
|
|
A10627 | VAN ROUWENDAAL | Sharon | NED
|
|
|
A00622 | AUBRY | David | FRA
|
|
|
A05189 | KLEIN | Lisa | GER
|
|
|
A03293 | GANNA | Filippo | ITA
|
|
|
A11041 | WELLBROCK | Florian | GER
|
|
|
A03991 | HAVIK | Yoeri | NED
|
|
|
*/
|
|
|
|
|
|
-- 9. Athlètes (code, nom, prénom, code du pays) ayant remporté quatre médailles.
|
|
|
SELECT a.code, a.nom, a.prenom, a.pays
|
|
|
FROM resultat r
|
|
|
INNER JOIN athlete a ON a.code = r.athlete
|
|
|
GROUP BY a.code
|
|
|
HAVING COUNT(*) = 4;
|
|
|
/*
|
|
|
code | nom | prenom | pays
|
|
|
--------+---------+----------+------
|
|
|
A11582 | ZHANG | Yufei | CHN
|
|
|
A09215 | SCOTT | Duncan | GBR
|
|
|
A10225 | TITMUS | Ariarne | AUS
|
|
|
A06581 | McKEOWN | Kaylee | AUS
|
|
|
A05668 | LEDECKY | Kathleen | USA
|
|
|
*/
|
|
|
|
|
|
-- 10. Nombre d’athlètes mineurs au début des Jeux Olympiques (le 23 juillet 2021) par discipline,uniquement pour les disciplines ayant au moins trois athlètes mineurs.
|
|
|
SELECT d.nom discipline, COUNT(*) athletes_mineurs
|
|
|
FROM pratiquer p
|
|
|
INNER JOIN athlete a ON a.code = p.athlete
|
|
|
INNER JOIN discipline d ON d.code = p.discipl
|
|
|
WHERE (('2021-07-23'-dateNaiss) / 365.2422) < 18
|
|
|
GROUP BY d.code
|
|
|
HAVING COUNT(*) > 2;
|
|
|
/*
|
|
|
discipline | athletes_mineurs
|
|
|
---------------------+------------------
|
|
|
Diving | 10
|
|
|
Skateboarding | 18
|
|
|
Artistic Swimming | 3
|
|
|
Athletics | 6
|
|
|
Artistic Gymnastics | 15
|
|
|
Table Tennis | 3
|
|
|
Swimming | 72
|
|
|
Rhythmic Gymnastics | 8
|
|
|
Shooting | 3
|
|
|
Sailing | 5
|
|
|
Archery | 4
|
|
|
*/
|
|
|
|
|
|
-- 11. Pays ayant le plus d’athlètes.
|
|
|
SELECT pays, COUNT(*) athletes
|
|
|
FROM athlete a
|
|
|
GROUP BY a.pays
|
|
|
ORDER BY athletes DESC
|
|
|
LIMIT 1;
|
|
|
/*
|
|
|
pays | athletes
|
|
|
------+----------
|
|
|
USA | 633
|
|
|
*/
|
|
|
|
|
|
-- 11. (Variante) Pays ayant le plus d’athlètes.
|
|
|
SELECT pays, COUNT(*) athletes
|
|
|
FROM athlete a
|
|
|
GROUP BY a.pays
|
|
|
HAVING COUNT(*) = (
|
|
|
SELECT MAX(c) FROM (
|
|
|
SELECT COUNT(*) c
|
|
|
FROM athlete
|
|
|
GROUP BY pays
|
|
|
) n_athletes
|
|
|
);
|
|
|
/*
|
|
|
pays | athletes
|
|
|
------+----------
|
|
|
USA | 633
|
|
|
*/
|
|
|
|
|
|
-- 12. Athlète (nom, prénom, code pays) ayant remporté le plus de médailles.
|
|
|
SELECT a.nom, a.prenom, a.pays, COUNT(*) medailles_remportees FROM resultat r
|
|
|
INNER JOIN athlete a ON a.code = r.athlete
|
|
|
GROUP BY a.code
|
|
|
ORDER BY medailles_remportees DESC
|
|
|
LIMIT 1;
|
|
|
/*
|
|
|
nom | prenom | pays | medailles_remportees
|
|
|
--------+--------+------+----------------------
|
|
|
McKEON | Emma | AUS | 7
|
|
|
*/
|
|
|
|
|
|
-- 12. (Variante) Athlète (nom, prénom, code pays) ayant remporté le plus de médailles.
|
|
|
SELECT a.nom, a.prenom, a.pays, COUNT(*) medailles_remportees
|
|
|
FROM resultat r
|
|
|
INNER JOIN athlete a ON a.code = r.athlete
|
|
|
GROUP BY a.code
|
|
|
HAVING COUNT(*) = (
|
|
|
SELECT MAX(c) FROM (
|
|
|
SELECT COUNT(*) c
|
|
|
FROM resultat
|
|
|
GROUP BY athlete
|
|
|
) n_resultats
|
|
|
);
|
|
|
/*
|
|
|
nom | prenom | pays | medailles_remportees
|
|
|
--------+--------+------+----------------------
|
|
|
McKEON | Emma | AUS | 7
|
|
|
*/
|
|
|
|