linear regression
25
Aggregation/linar_regression.md
Normal file
25
Aggregation/linar_regression.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Agrégation - Régression linéaire
|
||||||
|
|
||||||
|
> La régression linéaire est un modèle qui cherche à établir une relation linéaire entre une variable, dite expliquée, et une ou plusieurs variables, dites explicatives.
|
||||||
|
|
||||||
|
La régression linéaire simple cherche une droite : y = a⋅x + b
|
||||||
|
|
||||||
|
- a est la pente de la droite (slope),
|
||||||
|
- b est l’ordonnée à l’origine (intercept).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
`REGR_SLOPE(y, x)` Calcule la pente de la droite (a),
|
||||||
|
|
||||||
|
`REGR_INTERCEPT(y, x)` Calcule l’ordonnée à l’origine (b).
|
||||||
|
|
||||||
|
`REGR_R2(y, x)` Coefficient de détermination (entre 0 et 1).
|
||||||
|
|
||||||
|
Mesure la qualité de l’ajustement :
|
||||||
|
|
||||||
|
- 1 : la droite explique parfaitement les données,
|
||||||
|
- 0 : aucun lien linéaire,
|
||||||
|
|
||||||
|
plus c’est proche de 1, plus la droite est pertinente.
|
||||||
|
|
||||||
|
`REGR_COUNT(y, x)` Nombre de paires (x, y) effectivement utilisées (hors NULL) pour effectuer le calcul. Équivalent à COUNT(*) mais appliqué seulement sur les deux colonnes non nulles.
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
<line x1="30" y1="330" x2="30" y2="13" stroke="#000" marker-end="url(#arrow)" />
|
<line x1="30" y1="330" x2="30" y2="13" stroke="#000" marker-end="url(#arrow)" />
|
||||||
<line x1="10" y1="312.5" x2="330" y2="312" stroke="#000" marker-end="url(#arrow)" />
|
<line x1="10" y1="312.5" x2="330" y2="312" stroke="#000" marker-end="url(#arrow)" />
|
||||||
<path stroke="#000" d="M55 317.5v-10M80 317.5v-10M105 317.5v-10M130 317.5v-10M155 317.5v-10M180 317.5v-10M205 317.5v-10M230 317.5v-10M255 317.5v-10M280 317.5v-10M305 317.5v-10M25 287.5h10M25 262.5h10M25 237.5h10M25 212.5h10M25 187.5h10M25 162.5h10M25 137.5h10M25 112.5h10M25 87.5h10M25 62.5h10M25 37.5h10"/>
|
<path stroke="#000" d="M55 317.5v-10M80 317.5v-10M105 317.5v-10M130 317.5v-10M155 317.5v-10M180 317.5v-10M205 317.5v-10M230 317.5v-10M255 317.5v-10M280 317.5v-10M305 317.5v-10M25 287.5h10M25 262.5h10M25 237.5h10M25 212.5h10M25 187.5h10M25 162.5h10M25 137.5h10M25 112.5h10M25 87.5h10M25 62.5h10M25 37.5h10"/>
|
||||||
|
<text x="10" y="30">b</text>
|
||||||
<g fill="#008">
|
<g fill="#008">
|
||||||
<ellipse rx="4" ry="4" cx="205" cy="186.5" />
|
<ellipse rx="4" ry="4" cx="205" cy="186.5" />
|
||||||
<ellipse rx="4" ry="4" cx="155" cy="213.75" />
|
<ellipse rx="4" ry="4" cx="155" cy="213.75" />
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
5
Home.md
5
Home.md
@@ -1,6 +1,7 @@
|
|||||||
# fonctions avancées du langage SQL
|
# fonctions avancées du langage SQL
|
||||||
|
|
||||||
- [Fonctions d'agrégation](aggregation.md)
|
- [Fonctions d'agrégation](aggregation.md)
|
||||||
|
- [Régression linéaire](Aggregation/linear_regression.md)
|
||||||
- [Jointure](Jointure.md)
|
- [Jointure](Jointure.md)
|
||||||
- [Sous requêtes](sousrequete.md)
|
- [Sous requêtes](sousrequete.md)
|
||||||
- [Vues et fonctions](View.md)
|
- [Vues et fonctions](View.md)
|
||||||
@@ -11,6 +12,10 @@
|
|||||||
|
|
||||||
## Exercices
|
## Exercices
|
||||||
|
|
||||||
|
### Jointures
|
||||||
|
|
||||||
|
- Lister les articles dont la famille n'existe pas.
|
||||||
|
|
||||||
Arrondir les montant à deux chiffres après la virgule.
|
Arrondir les montant à deux chiffres après la virgule.
|
||||||
|
|
||||||
- 1a : Pour chaque adhérent unique, afficher son nom et son nombre de ticket.
|
- 1a : Pour chaque adhérent unique, afficher son nom et son nombre de ticket.
|
||||||
|
|||||||
@@ -287,36 +287,6 @@ Retourne la valeur la plus fréquente.
|
|||||||
|
|
||||||
Ces fonctions sont en réalité des [fenêtres analytiques](window.md) mais peuvent être utilisées pour explorer la distribution.
|
Ces fonctions sont en réalité des [fenêtres analytiques](window.md) mais peuvent être utilisées pour explorer la distribution.
|
||||||
|
|
||||||
## Régressions linéaires simples
|
|
||||||
|
|
||||||
Ces fonctions permettent de réaliser des régressions linéaires simples directement en SQL, c’est-à-dire d’ajuster une droite de tendance entre deux ensembles de données numériques (variables x et y).
|
|
||||||
|
|
||||||
On suppose qu’on a deux variables :
|
|
||||||
- x : la variable explicative (indépendante),
|
|
||||||
- y : la variable à expliquer (dépendante).
|
|
||||||
|
|
||||||
La régression linéaire simple cherche une droite : y = a⋅x + b
|
|
||||||
|
|
||||||
- a est la pente (slope).
|
|
||||||
- b est l’ordonnée à l’origine (intercept),
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
`REGR_SLOPE(y, x)` Calcule la pente de la droite (a),
|
|
||||||
|
|
||||||
`REGR_INTERCEPT(y, x)` Calcule l’ordonnée à l’origine (b).
|
|
||||||
|
|
||||||
`REGR_R2(y, x)` Coefficient de détermination (entre 0 et 1).
|
|
||||||
|
|
||||||
Mesure la qualité de l’ajustement :
|
|
||||||
|
|
||||||
- 1 : la droite explique parfaitement les données,
|
|
||||||
- 0 : aucun lien linéaire,
|
|
||||||
|
|
||||||
plus c’est proche de 1, plus la droite est pertinente.
|
|
||||||
|
|
||||||
`REGR_COUNT(y, x)` Nombre de paires (x, y) effectivement utilisées (hors NULL) pour effectuer le calcul. Équivalent à COUNT(*) mais appliqué seulement sur les deux colonnes non nulles.
|
|
||||||
|
|
||||||
## Agrégats d'intervalles
|
## Agrégats d'intervalles
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,28 @@ Parce qu’elle doit produire une table (un jeu de résultats) indépendante **a
|
|||||||
- Dans le SELECT, une sous-requête peut être corrélée (elle utilise des colonnes de la requête principale) ou non.
|
- Dans le SELECT, une sous-requête peut être corrélée (elle utilise des colonnes de la requête principale) ou non.
|
||||||
- Dans le WHERE, idem : elle peut être corrélée (EXISTS, IN dépendant de la ligne en cours) ou non (test fixe).
|
- Dans le WHERE, idem : elle peut être corrélée (EXISTS, IN dépendant de la ligne en cours) ou non (test fixe).
|
||||||
|
|
||||||
|
## Sous-requête scalaire
|
||||||
|
|
||||||
|
> une sous-requête scalaire est une sous-requête qui retourne **une seule valeur** (un scalaire, c’est-à-dire une seule ligne et une seule colonne).
|
||||||
|
|
||||||
|
Elle peut être utilisée partout où une valeur simple est attendue, par exemple :
|
||||||
|
|
||||||
|
- dans la liste de sélection (SELECT),
|
||||||
|
- dans une clause WHERE,
|
||||||
|
- dans une clause HAVING,
|
||||||
|
- parfois même dans la clause ORDER BY.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT *
|
||||||
|
FROM table
|
||||||
|
WHERE nom_colonne = (
|
||||||
|
SELECT valeur
|
||||||
|
FROM table2
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
**Exercice :** Sélectionner les articles dont le prix est supérieur à la moyenne générale des prix des articles.
|
**Exercice :** Sélectionner les articles dont le prix est supérieur à la moyenne générale des prix des articles.
|
||||||
|
|
||||||
Dans un langage procédural on utiliserait deux étapes pour obtenir le résultat. Première étape calculer la moyenne des prix
|
Dans un langage procédural on utiliserait deux étapes pour obtenir le résultat. Première étape calculer la moyenne des prix
|
||||||
@@ -44,6 +66,14 @@ select * from article
|
|||||||
|
|
||||||
Cette fois ci il faut calculer les moyennes des prix pour chacune des familles et comparer les articles avec la moyenne correspondante. Ce n'est plus possible en programmation procédurale.
|
Cette fois ci il faut calculer les moyennes des prix pour chacune des familles et comparer les articles avec la moyenne correspondante. Ce n'est plus possible en programmation procédurale.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select avg(prix) from article where famille_code = '02CHOU';
|
||||||
|
select * from article where prix > 3.68 and famille_code = '02CHOU';
|
||||||
|
|
||||||
|
select avg(prix) from article where famille_code = '02NARU';
|
||||||
|
select * from article where prix > 2.47 and famille_code = '02NARU';
|
||||||
|
```
|
||||||
|
|
||||||
La sous requête permet de calculer pour chaque ligne d'article la moyenne correspondante à la famille du dit article.
|
La sous requête permet de calculer pour chaque ligne d'article la moyenne correspondante à la famille du dit article.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
@@ -56,33 +86,6 @@ select code, article, prix from article a1
|
|||||||
|
|
||||||
Remarquez l'utilisation de l'alias `a1` sur la table de la requête principale pour pouvoir être injecter sans confusion dans la sous requête car celle-ci utilise la même table.
|
Remarquez l'utilisation de l'alias `a1` sur la table de la requête principale pour pouvoir être injecter sans confusion dans la sous requête car celle-ci utilise la même table.
|
||||||
|
|
||||||
## Sous-requête scalaire
|
|
||||||
|
|
||||||
> une sous-requête scalaire est une sous-requête qui retourne **une seule valeur** (un scalaire, c’est-à-dire une seule ligne et une seule colonne).
|
|
||||||
|
|
||||||
Elle peut être utilisée partout où une valeur simple est attendue, par exemple :
|
|
||||||
|
|
||||||
- dans la liste de sélection (SELECT),
|
|
||||||
- dans une clause WHERE,
|
|
||||||
- dans une clause HAVING,
|
|
||||||
- parfois même dans la clause ORDER BY.
|
|
||||||
|
|
||||||
```sql
|
|
||||||
SELECT *
|
|
||||||
FROM table
|
|
||||||
WHERE nom_colonne = (
|
|
||||||
SELECT valeur
|
|
||||||
FROM table2
|
|
||||||
LIMIT 1
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
Sélection des articles dont le prix est supérieur à la moyenne des prix de tous les articles
|
|
||||||
|
|
||||||
```sql
|
|
||||||
select * from article
|
|
||||||
where prix > (select avg(prix) from article);
|
|
||||||
```
|
|
||||||
|
|
||||||
## Conditions
|
## Conditions
|
||||||
|
|
||||||
|
|||||||
@@ -226,10 +226,11 @@ from ca_mensuel
|
|||||||
order by mois
|
order by mois
|
||||||
```
|
```
|
||||||
|
|
||||||
### Moyenne glissante sur 3 mois
|
**Exercice :** Calculer la moyenne glissante sur 3 mois
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
select *, round(AVG(total) over (
|
select *,
|
||||||
|
round(AVG(total) over (
|
||||||
order by mois
|
order by mois
|
||||||
rows between 2 preceding and current row
|
rows between 2 preceding and current row
|
||||||
), 2) as moyenne_glissante_3
|
), 2) as moyenne_glissante_3
|
||||||
|
|||||||
Reference in New Issue
Block a user