td2

2025-09-12 12:59:49 +02:00
parent 26dbcf44a5
commit 1e8340c37f
2 changed files with 124 additions and 75 deletions

94
td2.md

@@ -3,24 +3,20 @@
## 1. Nombre de clients ## 1. Nombre de clients
```sql ```sql
select count(*) from customers;
``` ```
### 2. Nombre d'albums ### 2. Nombre d'albums
```sql ```sql
select count(*) from albums;
``` ```
### 3. Nombre d'artistes ### 3. Nombre d'artistes
```sql ```sql
select count(*) from artists;
``` ```
### 4. Liste des pays ### 4. Liste des pays
```sql ```sql
select distinct country from customers;
``` ```
Utilisation de `distinct` pour supprimer les doublons. Utilisation de `distinct` pour supprimer les doublons.
@@ -28,85 +24,55 @@ Utilisation de `distinct` pour supprimer les doublons.
### 5. Nombre de clients par pays ### 5. Nombre de clients par pays
```sql ```sql
select country, count(*) from customers group by Country order by count(*) desc;
``` ```
### 6. Nombre de pistes par genre ### 6. Nombre de pistes par genre
```sql ```sql
select g.Name, count(*) as nb from tracks t
inner join genres g on g.GenreId = t.GenreId
group by g.GenreId order by nb desc;
``` ```
### 7. Nombre d'albums par artiste ### 7. Nombre d'albums par artiste
```sql ```sql
select a.Name, count(*) as nb from artists a
inner join albums b on b.ArtistId = a.ArtistId
group by a.Name order by nb desc;
``` ```
### 8. Nombre de piste par artiste ### 8. Nombre de piste par artiste
```sql ```sql
select a.Name, count(*) as nb from artists a
inner join albums b on a2.ArtistId = a.ArtistId
inner join tracks t on t.AlbumId = b.AlbumId
group by a.Name
order by nb desc;
``` ```
### 9. Nombre de minute de musique par album ### 9. Nombre de minute de musique par album
```sql ```sql
select a.Title , sum(t.Milliseconds/60000) as duree
from tracks t
inner join albums a on a.AlbumId = t.AlbumId
group by a.Title
order by duree desc;
``` ```
### 10. Recette par piste ### 10. Recette par piste
```sql ```sql
select t.Name, sum(ii.UnitPrice*ii.Quantity) as recette
from tracks t
inner join invoice_items ii on ii.TrackId = t.TrackId
group by t.Name order by recette desc;
``` ```
### 9. Recette par album ### 9. Recette par album
```sql ```sql
select a.Title, sum(ii.UnitPrice*ii.Quantity) as recette
from tracks t
inner join invoice_items ii on (ii.TrackId = t.TrackId)
inner join albums a on a.AlbumId = t.AlbumId
group by a.Title
order by recette desc;
``` ```
### 10. Les 3 meilleurs clients ### 10. Les 3 meilleurs clients
```sql ```sql
select c.FirstName, c.LastName, sum(i.Total) as total
from customers c
inner join invoices i on i.CustomerId = c.CustomerId
GROUP by c.CustomerId
order by total DESC
limit 3;
``` ```
### 11. Les genres écoutés par Isabelle Mercier ### 11. Les genres écoutés par Isabelle Mercier
```sql ```sql
select distinct g.Name from genres g
inner join tracks t on t.GenreId = g.GenreId
inner join invoice_items ii on ii.TrackId = t.TrackId
inner join invoices i on ii.InvoiceId = i.InvoiceId
inner join customers c on c.CustomerId = i.CustomerId
where c.FirstName = 'Isabelle' and c.LastName ='Mercier';
``` ```
Attention l'égalité est stricte sur FirstName et LastName (respect des majuscules / minuscules) Attention l'égalité est stricte sur FirstName et LastName (respect des majuscules / minuscules)
@@ -115,23 +81,19 @@ Attention l'égalité est stricte sur FirstName et LastName (respect des majuscu
### 12. Recette après le 01/05/2013 ### 12. Recette après le 01/05/2013
```sql ```sql
select sum(i.Total) from invoices i where i.InvoiceDate > DATETIME('2013-05-01');
``` ```
### 13. Recette entre le 15/04/2012 et le 20/06/2012 ### 13. Recette entre le 15/04/2012 et le 20/06/2012
```sql ```sql
select sum(i.Total)
from invoices i
where i.InvoiceDate between DATETIME('2012-04-15') and DATETIME('2012-06-20');
``` ```
### 14. Recette du mois de février 2012 ### 14. Recette du mois de février 2012
```sql ```sql
select sum(i.Total)
from invoices i
where STRFTIME('%m/%Y', i.InvoiceDate) = '02/2012'
``` ```
STRFTIME (string from datetime) permet de formater au format de texte un date. Le format est complètement libre et personnalisable. STRFTIME (string from datetime) permet de formater au format de texte un date. Le format est complètement libre et personnalisable.
@@ -139,44 +101,33 @@ STRFTIME (string from datetime) permet de formater au format de texte un date. L
### 15. Recettes par mois ### 15. Recettes par mois
```sql ```sql
select STRFTIME('%Y-%m', i.InvoiceDate) as mois,
sum(i.Total)
from invoices i
group by mois
order by mois
``` ```
### 16. Recette de l'année 2013 ### 16. Recette de l'année 2013
```sql ```sql
select sum(i.Total)
from invoices i
where STRFTIME('%Y', i.InvoiceDate) = '2013'
``` ```
## Recherche sur le texte ## Recherche sur le texte
### 17. Liste des pistes qui contiennent le mot Love ### 17. Liste des pistes qui contiennent le mot Love
```sql ```sql
select t.Name from tracks t
where t.NAME LIKE '%love%';
``` ```
L'opérateur LIKE ne tient pas compte de la différence minuscule/majuscule L'opérateur LIKE ne tient pas compte de la différence minuscule/majuscule
### 18. Liste des pistes qui contiennent les lettres Sun ### 18. Liste des pistes qui contiennent les lettres Sun
```sql ```sql
select t.Name from tracks t
where t.NAME LIKE '%SUN%';
``` ```
### 19. Liste des pistes qui contiennent le mot Sun ### 19. Liste des pistes qui contiennent le mot Sun
```sql ```sql
select t.Name from tracks t
where t.NAME LIKE 'SUN %' OR
t.NAME LIKE '% SUN' OR
t.NAME LIKE '% SUN %';
``` ```
## Cohérence ## Cohérence
@@ -184,12 +135,7 @@ where t.NAME LIKE 'SUN %' OR
### 20. Le total de chaque facture est il juste ? ### 20. Le total de chaque facture est il juste ?
```sql ```sql
select i.Total, sum(ii.UnitPrice*ii.Quantity) as somme,
printf('%.20f', i.Total - sum(ii.UnitPrice*ii.Quantity))
from invoices i
inner join invoice_items ii on ii.InvoiceId = i.InvoiceId
group by i.InvoiceId
HAVING Abs(i.Total - somme) >= 0.01
``` ```
ou en utilisant ROUND : HAVING i.Total <> Round(somme,2) ou en utilisant ROUND : HAVING i.Total <> Round(somme,2)
@@ -197,7 +143,5 @@ ou en utilisant ROUND : HAVING i.Total <> Round(somme,2)
### 21. Existe t il des pistes dont le prix unitaire a évolué ? ### 21. Existe t il des pistes dont le prix unitaire a évolué ?
```sql ```sql
select t.Name from tracks t
left join invoice_items ii on ii.TrackId = t.TrackId
where t.UnitPrice <> ii.UnitPrice
``` ```

105
td2.sql Normal file

@@ -0,0 +1,105 @@
select count(*) from customers;
select count(*) from albums;
select count(*) from artists;
select distinct country from customers;
select country, count(*) from customers group by Country order by count(*) desc;
select g.Name, count(*) as nb from tracks t
inner join genres g on g.GenreId = t.GenreId
group by g.GenreId order by nb desc;
select a.Name, count(*) as nb from artists a
inner join albums b on b.ArtistId = a.ArtistId
group by a.Name order by nb desc;
select a.Name, count(*) as nb from artists a
inner join albums b on a2.ArtistId = a.ArtistId
inner join tracks t on t.AlbumId = b.AlbumId
group by a.Name
order by nb desc;
select a.Title , sum(t.Milliseconds/60000) as duree
from tracks t
inner join albums a on a.AlbumId = t.AlbumId
group by a.Title
order by duree desc;
select t.Name, sum(ii.UnitPrice*ii.Quantity) as recette
from tracks t
inner join invoice_items ii on ii.TrackId = t.TrackId
group by t.Name order by recette desc;
select a.Title, sum(ii.UnitPrice*ii.Quantity) as recette
from tracks t
inner join invoice_items ii on (ii.TrackId = t.TrackId)
inner join albums a on a.AlbumId = t.AlbumId
group by a.Title
order by recette desc;
select c.FirstName, c.LastName, sum(i.Total) as total
from customers c
inner join invoices i on i.CustomerId = c.CustomerId
GROUP by c.CustomerId
order by total DESC
limit 3;
select distinct g.Name from genres g
inner join tracks t on t.GenreId = g.GenreId
inner join invoice_items ii on ii.TrackId = t.TrackId
inner join invoices i on ii.InvoiceId = i.InvoiceId
inner join customers c on c.CustomerId = i.CustomerId
where c.FirstName = 'Isabelle' and c.LastName ='Mercier';
select sum(i.Total) from invoices i where i.InvoiceDate > DATETIME('2013-05-01');
select sum(i.Total)
from invoices i
where i.InvoiceDate between DATETIME('2012-04-15') and DATETIME('2012-06-20');
select sum(i.Total)
from invoices i
where STRFTIME('%m/%Y', i.InvoiceDate) = '02/2012'
select STRFTIME('%Y-%m', i.InvoiceDate) as mois,
sum(i.Total)
from invoices i
group by mois
order by mois
select sum(i.Total)
from invoices i
where STRFTIME('%Y', i.InvoiceDate) = '2013'
select t.Name from tracks t
where t.NAME LIKE '%love%';
select t.Name from tracks t
where t.NAME LIKE '%SUN%';
select t.Name from tracks t
where t.NAME LIKE 'SUN %' OR
t.NAME LIKE '% SUN' OR
t.NAME LIKE '% SUN %';
select i.Total, sum(ii.UnitPrice*ii.Quantity) as somme,
printf('%.20f', i.Total - sum(ii.UnitPrice*ii.Quantity))
from invoices i
inner join invoice_items ii on ii.InvoiceId = i.InvoiceId
group by i.InvoiceId
HAVING Abs(i.Total - somme) >= 0.01
select t.Name from tracks t
left join invoice_items ii on ii.TrackId = t.TrackId
where t.UnitPrice <> ii.UnitPrice