Jointures simples
- Affichez le titre des albums de l’artiste AC/DC.
Utilisation d'une sous-requête. Une requête utilise le résultat d'une autre.
Utilisation d'une jointure entre 2 tables
select b.title
from album b
join artist a on b.artist_id = a.artist_id
where a.name = 'AC/DC';
- Affichez le nom des pistes (Track.Name) et le nom de l’album (Album.Title) associé.
select t.name, a.title
from track t
join album a on a.album_id = t.album_id;
La liaison ON sur ce qui est commun entre les 2 tables
- Listez les factures (InvoiceId, Total) avec le nom du client (Firstname, LastName).
select i.invoice_id, i.total, c.first_name, c.last_name
from invoice i
join customer c on c.customer_id = i.customer_id
- Listez tous les clients (prénom, nom) avec le pays et l’employé commercial (prénom, nom) qui leur est assigné.
remarque
FirstName et LastName sont présents dans les 2 tables. Il est OBLIGATOIRE d'utiliser l'alias de table pour savoir quelle colonne est affichée
- Affichez toutes les pistes (Name) avec leur genre (Genre.Name).
- Affichez toutes les pistes (Track.Name) avec leur artiste (Artist.Name).
Compter
- Nombre de clients
select count(*) from customer;
- Nombre d'albums
select count(*) from album;
- Nombre d'artistes
select count(*) from artist;
- Combien y a-t-il de pays différents parmi les clients ?
select count(distinct country)
from customer;
Utilisation de distinct pour supprimer les doublons.
- Liste des pays uniques
select distinct country
from customer;
Agrégations
- Nombre de clients par pays
select country, count(*)
from customer
group by country;
- Nombre de pistes par genre
select g.name,count(t.*)
from track t
join genre g on g.genre_id=t.genre_id
group by g.genre_id;
- Nombre d'albums par artiste.
select a.name,count(m.*)
from artist a
join album m on a.artist_id = m.artist_id
group by a.artist_id;
- Nombre de piste par artiste
select a.name,count(t.*)
from artist a
join album m on a.artist_id = m.artist_id
join track t on t.album_id = m.album_id
group by a.artist_id;
- Durée total des albums au format heure/minutes/secondes
select a.title, (sum(t.milliseconds/1000) || 'minutes')::INTERVAL
from track t
join album a on t.album_id = a.album_id
group by a.album_id;
- Chiffre d'affaire par piste
select t.track_id, t.name AS track_name,
SUM(il.unit_price * il.quantity) AS total_revenue
from track t
join invoice_line il on t.track_id = il.track_id
group by t.track_id, t.name;
- Chiffre d'affaire par album
select m.title,
SUM(l.unit_price * l.quantity) as recette
from track t
join invoice_line l ON t.track_id = l.track_id
join album m on m.album_id = t.album_id
group by m.album_id;
- Les 3 meilleurs clients.
Combinaison d'un tri descendant (du plus grand au plus petit) et limiter le nombre de lignes.
select c.first_name, c.last_name,
sum(i.total) as revenu
from invoice i
join customer c on c.customer_id = i.customer_id
group by c.customer_id
order by revenu desc
limit 3;
- Les genres écoutés par Isabelle Mercier
Attention l'égalité est stricte sur FirstName et LastName (respect des majuscules / minuscules)