td2
94
td2.md
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
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
|
||||||
Reference in New Issue
Block a user