agrégation
102
aggregation.md
102
aggregation.md
@@ -1,11 +1,11 @@
|
||||
# Fonctions d'agrégation
|
||||
|
||||
> [!NOTE]
|
||||
> Une agrégation est une opération qui permet de combiner plusieurs valeurs de données en une seule valeur résumée. Les opérations d'agrégation sont souvent utilisées en combinaison avec la clause `group by` pour regrouper les données selon des critères spécifiques avant de les résumer.
|
||||
> Une agrégation est une opération qui permet de combiner **plusieurs valeurs de données en une seule valeur** résumée. Les opérations d'agrégation sont souvent utilisées en combinaison avec la clause `group by` pour regrouper les données selon des critères spécifiques avant de les résumer.
|
||||
|
||||
### Compter
|
||||
## Compter
|
||||
|
||||
Compte le nombre d'enregistrements dans un ensemble de données.
|
||||
L'opérateur `count` Compte le nombre d'enregistrements dans un ensemble de données.
|
||||
|
||||
**Exercice :** Compter le nombre d'adhérents.
|
||||
|
||||
@@ -16,6 +16,16 @@ select count(*) from adherent
|
||||
|
||||
On peut compter sur n'importe quelle colonne, dans ce cas, pour ne pas avoir à choisir on utilise le caractère joker *.
|
||||
|
||||
> [!WARNING]
|
||||
> Attention ! Si on compte sur une colonne seules les lignes avec une valeur **non nulle** seront comptées.
|
||||
|
||||
**Exercice :** Compter le nombre d'adhérent dont le codepostal est non null.
|
||||
|
||||
```sql
|
||||
select count(codepostal) from adherent;
|
||||
>> 2438
|
||||
```
|
||||
|
||||
**Exercice :** Compter le nombre d'articles de la famille 02CHOU.
|
||||
|
||||
```sql
|
||||
@@ -24,7 +34,7 @@ select count(*) from article
|
||||
>> 29
|
||||
```
|
||||
|
||||
### distinct
|
||||
## distinct
|
||||
|
||||
En ajoutant le mot clé `distinct` l'opération s'effectue sur les **valeurs uniques** d'une ou de plusieurs colonnes.select codepostal,
|
||||
count(case when genre = 1 then 1 end) as nb_hommes,
|
||||
@@ -39,19 +49,17 @@ select count(distinct codepostal) from adherent
|
||||
>> 11
|
||||
```
|
||||
|
||||
Attention ! Sans distinct `count(codepostal)` compte **toutes** les lignes de la colonne codepostal, soit le nombre total d'ahérent.
|
||||
|
||||
```sql
|
||||
select count(codepostal) from adherent
|
||||
>> 2439
|
||||
```
|
||||
> [!WARNING]
|
||||
> Attention ! Sans distinct, `count(codepostal)` compte **toutes** les lignes de la colonne codepostal dont la valeur est non nulle. Dans notre cas pratiquement tous les adhérents (2438/2439).
|
||||
|
||||
### Regroupement
|
||||
|
||||
la clause `group by` permet de choisir un ou plusieurs niveau de regroupement.
|
||||
|
||||
```sql
|
||||
select codepostal, count(*) from adherent group by codepostal;
|
||||
select codepostal, count(*)
|
||||
from adherent
|
||||
group by codepostal;
|
||||
```
|
||||
|
||||
codepostal | count
|
||||
@@ -74,7 +82,8 @@ Il est possible de donner un nom spécifique à n'importe qu'elle colonne y comp
|
||||
|
||||
```sql
|
||||
select codepostal, count(*) as nb_adherents
|
||||
from adherent group by codepostal;
|
||||
from adherent
|
||||
group by codepostal;
|
||||
```
|
||||
|
||||
### Filtre
|
||||
@@ -134,7 +143,7 @@ from adherent
|
||||
group by codepostal;
|
||||
```
|
||||
|
||||
### Somme
|
||||
## Somme
|
||||
|
||||
Calcule la somme des valeurs d'une colonne numérique.
|
||||
|
||||
@@ -154,7 +163,7 @@ select sum(round(quantite * prix_unitaire, 2)) as chiffre_affaire from ligne;
|
||||
|
||||
L'arrondi de la somme n'est pas égal à la somme des arrondis.
|
||||
|
||||
### Moyenne
|
||||
## Moyenne
|
||||
|
||||
Calcule la moyenne des valeurs d'une colonne numérique.
|
||||
|
||||
@@ -162,7 +171,7 @@ Calcule la moyenne des valeurs d'une colonne numérique.
|
||||
select avg(prix) from article;
|
||||
```
|
||||
|
||||
### Maximum
|
||||
## Maximum
|
||||
|
||||
Retourne la valeur maximale dans une colonne.
|
||||
|
||||
@@ -180,7 +189,7 @@ order by prix desc limit 1;
|
||||
>> Pistache 63 €
|
||||
```
|
||||
|
||||
### Minimum
|
||||
## Minimum
|
||||
|
||||
Retourne la valeur minimale dans une colonne.
|
||||
|
||||
@@ -199,16 +208,68 @@ order by prix asc limit 1;
|
||||
|
||||
### Une valeur
|
||||
|
||||
Avec la fonction `any_value` la colonne prend une valeur sans aucune distinction.
|
||||
Avec la fonction `any_value` la colonne prend une valeur de la colonne sans distinction particulière.
|
||||
|
||||
```sql
|
||||
select codepostal, any_value(nom)
|
||||
from adherent
|
||||
group by codepostal;
|
||||
```
|
||||
|
||||
codepostal | nom
|
||||
---|---
|
||||
88480|Fievet
|
||||
88490|Maury
|
||||
88100|Cuvelier
|
||||
88470|Maurin
|
||||
|Jouve
|
||||
88210|Aubertin
|
||||
88650|Wagner
|
||||
88580|Beaulieu
|
||||
88430|Baudouin
|
||||
88520|Bérard
|
||||
88110|Frémont
|
||||
88420|Besnard
|
||||
|
||||
### Toutes
|
||||
|
||||
La fonction `bool_and` ou son alias `every` renvoie vrai si toutes les lignes satisfont la condition.
|
||||
|
||||
**Exercice :** Afficher vrai si tous les articles d'une même famille ont tous leur prix supérieur à 10 €
|
||||
|
||||
```sql
|
||||
select famille_code, bool_and(prix > 10) as sup_10
|
||||
from article
|
||||
group by famille_code
|
||||
```
|
||||
|
||||
famille_code | sup_10
|
||||
---|---
|
||||
03BANA | false
|
||||
03PECHE|false
|
||||
03RHUBARBE|false
|
||||
03FIGUE|true
|
||||
03ORANGE|false
|
||||
|
||||
### Au moins un
|
||||
|
||||
La fonction `bool_or` renvoie vrai si au moins une lignes satisfait la condition.
|
||||
|
||||
**Exercice :** Afficher vrai si au moins un article d'une famille a un prix supérieur à 5 €
|
||||
|
||||
```sql
|
||||
select famille_code, bool_or(prix > 5) as sup_5
|
||||
from article
|
||||
group by famille_code
|
||||
```
|
||||
|
||||
famille_code | sup_5
|
||||
---|---
|
||||
03BANA | false
|
||||
03PECHE|true
|
||||
03RHUBARBE|true
|
||||
03FIGUE|true
|
||||
03ORANGE|false
|
||||
|
||||
### Concaténation en chaine
|
||||
|
||||
@@ -217,12 +278,19 @@ La fonction `bool_or` renvoie vrai si au moins une lignes satisfait la condition
|
||||
```sql
|
||||
select string_agg(distinct famille_code, ', ')
|
||||
from article;
|
||||
>> '02, 02AROM, 02ARTICHAU, 02ASP, 02AUBE, 02BETT, ...'
|
||||
```
|
||||
|
||||
### Concaténation en tableau
|
||||
|
||||
`ARRAY_AGG` construit une tableau à partir des éléments. Très utilisé lors d'une sérialisation en JSON par exemple.
|
||||
|
||||
```sql
|
||||
select array_agg(distinct famille_code)
|
||||
from article;
|
||||
>> ['02', '02AROM', '02ARTICHAU', '02ASP', '02AUBE', '02BETT', ...]
|
||||
```
|
||||
|
||||
### Filtre après agrégation
|
||||
|
||||
`HAVING` est emblable à `WHERE`, mais utilisé pour filtrer les résultats des fonctions d'agrégation **après** un `GROUP BY`.
|
||||
|
||||
11
tp1.md
11
tp1.md
@@ -1,14 +1,15 @@
|
||||
# Travaux pratiques de Cartographie
|
||||
|
||||
|
||||
1. Avec le logiciel QGIS
|
||||
## 1. Logiciel de catographie
|
||||
|
||||
Installer QGIS
|
||||
Ajouter les couches
|
||||
- AJouter une couche xyz avec OpenStreetMap
|
||||
- Zommer sur l'ile de Batz (En Bretagne, au nord de Morlaix)
|
||||
|
||||
|
||||
### POI (Point of Interest)
|
||||
## 2 POI (Point of Interest)
|
||||
- Ajouter une nouvelle table pour les points
|
||||
- Ajouter un point depuis QGIS : menhir de Kreach ar Bolloch (A) un autre sur le menhir de Porz ar Roc'h
|
||||
- Calculer la distance entre les 2 menhirs
|
||||
@@ -23,7 +24,7 @@ create table point (
|
||||
);
|
||||
```
|
||||
|
||||
2. Créer une table zone
|
||||
3. Créer une table zone
|
||||
|
||||
```sql
|
||||
create table zone (
|
||||
@@ -56,8 +57,8 @@ create table zone (
|
||||
### La Pinède
|
||||
- Dessiner la pinède ouest en faisant 3 parties (utiliser le magnétisme)
|
||||
- Vérifier que les 3 parties sont adjacentes
|
||||
- Fusionner les 3 parties
|
||||
- Retirer le marais de la pinède
|
||||
- Fusionner les 3 parties (ST_UNION)
|
||||
-
|
||||
|
||||
### Carte
|
||||
- Importer les données du fichier zone.csv
|
||||
|
||||
Reference in New Issue
Block a user