diff --git a/Home.md b/Home.md
index 1683c30..e111efb 100644
--- a/Home.md
+++ b/Home.md
@@ -4,6 +4,7 @@
- [Jointure](Jointures.md)
- [Sous requêtes](sousrequete.md)
- [Fonctions de fenêtrage](window.md)
+- [Données spatiales](Spatial.md)
- [Arbres](Arbres.md)
## Exercices
diff --git a/Réponses/1-10.sql b/Réponses/1-10.sql
index d299950..328f8dd 100644
--- a/Réponses/1-10.sql
+++ b/Réponses/1-10.sql
@@ -27,6 +27,16 @@ from (
group by t.id
) sous_requete;
+-- 2a : Calculer le montant moyen d’un ticket.
+-- 18.84
+select var_samp(total_ticket) as panier_median
+from (
+ select t.id, sum(l.quantite * l.prix_unitaire) as total_ticket
+ from ticket t
+ join ligne l on t.id = l.ticket_id
+ group by t.id
+) sous_requete;
+
-- 2b : Calculer le nombre moyen d'article distinct d'un ticket.
-- 6.69
SELECT round(avg(nb_articles_distincts),2) AS moyenne_articles_distincts
diff --git a/Spatial.md b/Spatial.md
new file mode 100644
index 0000000..c8f36ed
--- /dev/null
+++ b/Spatial.md
@@ -0,0 +1,146 @@
+---
+title: Base de données spatiales
+---
+
+> **définition :** Une base de données spatiale est une base de données optimisée pour stocker, interroger et manipuler des données géométriques en 3 dimensions (spatiales) et par extension des données géographiques.
+
+Un Système de Gestion de Bases de Données Géographiques (SGBDG), est un système conçu pour gérer, stocker, et interroger des données spatiales et/ou géographiques, y compris des points, les lignes et des polygones.
+
+L'Open Geospatial Consortium (OGC) a créé les spécifications des caractéristiques simples et les standards pour compléter les systèmes de gestion de bases de données avec les fonctionnalités de gestion de données spatiales.
+
+## Définition
+
+#### Représentation des données spatiales
+
+**Vecteur** : Représentation des données sous forme de points, lignes et polygones.
+
+**Raster** : Représentation des données sous forme de grille, où chaque cellule a une valeur correspondant à une caractéristique géographique.
+
+**WKT** : Well-Known Text format standard de type texte pour représenter les géométries, destiné à être lu par des humains.
+
+**WKB** : Well-Known Binary format standard binaire pour représenter les géométries. Il est utilisé pour assurer l'import/export/échange de données entre différentes plate-formes, sans risque.
+
+**GeoJSON** : format d’échange de données géospatiales en JSON.
+
+**GPX** : format XML créé spécifiquement pour enregistrer et partager des traces, itinéraires et points d’intérêt issus de récepteurs GPS.
+
+**KML** : format XML créé par Keyhole et racheté depuis par Google. Il est standardisé par l'OGC. Il peut inclure du style et des liens vers des photos ou des modèles 3D. C'est un format plus riche que GPX.
+
+### Analyse spatiale
+
+**Géocodage** : Transformation des adresses en coordonnées géographiques.
+
+**Reverse géocodage** : Transformation des coordonnées géographiques en adresse textuelle ou lieu.
+
+**Topologie** : Étude des relations spatiales entre les objets géographiques (adjacence, connectivité).
+
+**Requêtes spatiales** : Recherche de proximité, intersection, inclusion, connexité, adjacence.
+
+**SRID** (Spatial Reference System Identifier) est un identifiant numérique qui indique dans quel système de coordonnées une géométrie est définie.
+
+### SRID
+
+Le SRID est essentiel, c'est l’équivalent d’une unité de mesure pour les coordonnées géographiques.
+
+Une même géométrie (un point ou un polygone) peut exister dans différents systèmes de référence.
+
+Le SRID permet au SGBDG de savoir comment interpréter les coordonnées.
+
+Deux géométries avec des coordonnées identiques mais des SRID différents ne représentent pas le même emplacement.
+
+Quelques SRID populaires
+
+**EPSG:4326** : WGS84 (World Geodetic System 1984) est un système géodésique mondial basé sur la latitude et la longitude en degrés . Il est utilisé par le système de positionnement par satellite GPS.
+
+**EPSG:3857** : Web Mercator, utilisé par Google Maps et OpenStreet Map. Coordonnées en mètres projetés. Il n'est pas fidèle aux surfaces mais simple pour les cartes interactives.
+
+**EPSG:2154** : Lambert-93, projection officielle en France.
+
+Il existe des dizaines d'autres système suivant l'endrit du monde que l'on veut représenter.
+
+### Quand utiliser le type de données Géographie ?
+
+Le type de données géographie permet de stocker des données en coordonnées longitude/latitude, mais à un coût : il y a moins de fonctions définies sur `GEOGRAPHY` que sur `GEOMETRY` ; les fonctions qui sont définies demandent plus de temps de traitement CPU pour être exécutées.
+
+Si les données sont contenues dans une petite zone, comme une ville, il est préférable en termes de performance et de fonctionnalités disponibles de choisir `GEOMETRY`.
+
+Si les données sont globales ou couvrent une région continentale, les types `GEOGRAPHY` permettent de construire un système sans avoir à vous soucier des détails de projection.
+
+## Types de données spatiales :
+
+- **Points** : Représentent des emplacements précis (ex. emplacements de capteurs, adresses).
+- **Lignes** : Représentent des entités linéaires (ex. routes, rivières).
+- **Polygones** : Représentent des surfaces (ex. limites de villes, zones de conservation).
+
+
+### Point
+
+Le type `POINT` représente un point unique défini par ses valeurs x (*longitude*) et y (*latitude*).
+
+
+```sql
+select ST_MakePoint(12, 3);
+
+select ST_PointFromText('POINT(15 5)');
+```
+
+`ST_MakePoint` n'est pas conforme au standard mais il a l'avantage d'être rapide et de travailler sur des nombres à la place du texte.
+
+
+
+### Ligne
+
+Le type `LINESTRING` représente une ligne constituée de points.
+
+```sql
+select GeomFromText('LINESTRING(3 5,6 7,8 2,12 1)');
+```
+
+
+### Polygone
+
+Le type `POLYGON` est une ligne fermée qui représente une surface. Les coordonnées du dernier point sont égales aux coordonnées du premier point. Chaque point est séparé par une virgule (attention au format décimal français qui utilise aussi la virgule) et les coordonnées sont séparées par des espaces.
+
+```sql
+select GeomFromText('POLYGON((2 2, 4 3, 5 7, 3 8, 1 9, 2 2))')
+```
+
+### Géométrie
+
+Le type `GEOMETRY` représente indifféremment un point, une ligne ou un polygone. Les lignes de la table sont constituées d'un mélange de points, de lignes et de polygones.
+
+```sql
+select ST_GeomFromText('LINESTRING(3 5,6 7,8 2,12 1)');
+```
+
+### MULTIPOINT
+
+Le type MULTIPOINT représente une collection de points.
+
+```sql
+select MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)')
+```
+
+### MULTILINESTRING
+
+Le type MULTILINESTRING représente une collection de lignes.
+
+```sql
+select MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))');
+```
+
+### MULTIPOLYGON
+
+Le type MULTIPOLYGON représente une collection de polygones.
+
+```sql
+select MultiPolygonFromText('MULTIPOLYGON(
+ ((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),
+ ((59 18,67 18,67 13,59 13,59 18)))');
+```
+
+### GEOMETRYCOLLECTION
+
+Le type GEOMETRYCOLLECTION représente une collection d'objets géométriques points lignes ou polygones.
diff --git a/aggregation.md b/aggregation.md
index e5f3b19..08aa003 100644
--- a/aggregation.md
+++ b/aggregation.md
@@ -24,7 +24,7 @@ Il est également possible d'ajouter une condition `where` à cette colonne uniq
```sql
select count(distinct client) filter (where produit = 'pomme')
-from vente;
+ from vente;
```
### Somme
@@ -48,7 +48,7 @@ select sum(round(quantite * prix_unitaire, 2)) as chiffre_affaire from ligne;
Calcule la moyenne des valeurs d'une colonne numérique.
```sql
-SELECT AVG(prix) FROM article;
+select avg(prix) from article;
```
### Maximum
@@ -56,7 +56,7 @@ SELECT AVG(prix) FROM article;
Retourne la valeur maximale dans une colonne.
```sql
-SELECT MAX(age) FROM adherent;
+select max(age) from adherent;
```
Une autre solution consiste à trier la colonne est de limiter le résultat à une seule ligne
@@ -73,7 +73,7 @@ order by prix desc limit 1;
Retourne la valeur minimale dans une colonne.
```sql
-SELECT MIN(age) FROM adherent;
+select min(age) from adherent;
```
Une autre solution consiste à trier la colonne est de limiter le résultat à une seule ligne
@@ -85,6 +85,19 @@ select article, prix from article
order by prix asc limit 1;
```
+### Une valeur
+
+Avec la fonction `any_value` la colonne prend une valeur sans aucune distinction.
+
+### Toutes
+
+La fonction `bool_and` ou son alias `every` renvoie vrai si toutes les lignes satisfont la condition.
+
+### Au moins un
+
+La fonction `bool_or` renvoie vrai si au moins une lignes satisfait la condition.
+
+
### Concaténation en chaine
`STRING_AGG` construit une chaine de caractères séparés par un délimiteur
@@ -115,4 +128,87 @@ having count(t.id) = 72;
Avec postgreSQL et Microsoft SQL Server il n'est pas possible d'utiliser l'alias dans la condition having. La clause having intervient en amont du select dans le moteur d'exécution, l'alias n'est pas encore connu. Il faut réécrire la formule.
+## Agrégats d'intervalles
+
+postgreSQL support un type particulier que sont les intervalles de valeur en définitissant dans un même champ une borne inférieure et une supérieure.
+
+`range_agg` fusionne les intervalles tandis que `range_intersect_agg` retourne l'intersection.
+
+
## Agrégats statistiques
+
+Les aggrégats statistiques fonctionnent suivant 2 modes soit sur la pouplation totale (POP) soit sur des échantillons (SAMP) restreints.
+
+### Variance et écart type
+
+VAR_POP et VAR_SAMP calculent la variance, soit la dispersion des valeurs autour de la moyenne.
+
+STDDEV_POP et STDDEV_SAMP calculent l'écart-type (racine carrée de la variance).
+
+### Corrélation
+
+Les fonctions de covariance COVAR_POP(x, y) et COVAR_SAMP(x, y) mesurent comment deux colonnes varient ensemble.
+
+la fonction `corr` calcule le oefficient de corrélation linéaire de Pearson.
+
+- Proche de 1 → forte corrélation positive
+- Proche de 0 → pas de relation linéaire
+- Proche de -1 → forte corrélation négative
+
+
+### Médiane et percentiles
+
+```sql
+PERCENTILE_CONT(fraction) WITHIN GROUP (ORDER BY expr)
+```
+
+Calcule le quantile de manière continue (avec une interpolation des valeurs si besoin).
+
+fraction est entre 0 et 1 :
+- 0.25 → premier quartile
+- 0.5 → médiane
+- 0.75 → troisième quartile
+
+En statistique, un quartile est chacune des trois valeurs qui divisent les données triées en quatre parts égales, de sorte que chaque partie représente 1/4 de l'échantillon de population. Le quartile fait partie des quantiles.
+
+### Agrégats de répartition
+
+```sql
+MODE() WITHIN GROUP (ORDER BY expr)
+```
+
+Retourne la valeur la plus fréquente.
+
+# Rang
+
+`rank`, `percent_rank` et `dense_rank` calcule le rang de la données.
+
+`cume_dist` calcule la distribution cumulée.
+
+Ces fonctions sont en réalité des fenêtres analytiques mais peuvent être utilisées pour explorer la distribution. Exemple pour répartir en quartiles
+
+# 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_COUNT(y, x) Nombre de paires (x, y) effectivement utilisées (hors NULL). Équivalent à COUNT(*) mais appliqué seulement sur les deux colonnes non nulles.
+
+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.
diff --git a/intervalle.md b/intervalle.md
new file mode 100644
index 0000000..121f896
--- /dev/null
+++ b/intervalle.md
@@ -0,0 +1,292 @@
+---
+title: Types intervalles
+---
+
+Un intervalle possède un début d et une fin f, tels que d < f.
+
+Les types de plage sont utiles car ils représentent de nombreuses valeurs d’éléments dans une seule valeur de plage et parce que des concepts tels que les plages qui se chevauchent peuvent être exprimés clairement. L’utilisation de plages d’heures et de dates à des fins de planification en est l’exemple le plus clair ; mais les fourchettes de prix, les plages de mesure d'un instrument, etc. peuvent également être utiles.
+
+Les types de plage sont des types de données représentant une plage de valeurs d'un certain type d'élément (appelé sous-type de plage). Par exemple, des plages d’horodatage peuvent être utilisées pour représenter les plages horaires pendant lesquelles une salle de réunion est réservée. Dans ce cas, le type de données est tsrange (abréviation de « timestamp range ») et timestamp est le sous-type.
+
+## Types
+
+- int4range : Intervalle d'entier
+- int8range : Intervalle d'entier long
+- numrange : Intervalle de nombres décimaux
+- tsrange : Intervalle d'horodatage sans fuseau horaire
+- tstzrange : Intervalle d'horodatage avec fuseau horaire
+- daterange : Intervalle de date
+
+### Déclaration
+
+A l'aide de fonctions
+
+```sql
+SELECT int4range(10, 20);
+```
+
+Déclare un intervalle d'entiers enrte 10 inclus et 20 exclus.
+
+En mode textuel
+
+```sql
+SELECT '[10,20)'::int4range;
+```
+
+
+## Limites inclusives et exclusives
+
+Chaque plage non vide a deux limites, la limite inférieure et la limite supérieure. Tous les points entre ces valeurs sont inclus dans la plage. Une limite inclusive signifie que le point limite lui-même est également inclus dans la plage, tandis qu'une limite exclusive signifie que le point limite n'est pas inclus dans la plage.
+
+Dans la forme textuelle d'une plage, les limites inclusives sont représentées par des crochets `[` et `]` tandis que les limites exclusives sont représentées par des parenthèses `(` et `)`.
+
+Les fonctions lower_inc et upper_inc testent respectivement l'inclusivité des limites inférieure et supérieure d'une valeur de plage.
+
+## Plages infinies (illimitées)
+
+La limite inférieure d'une plage peut être omise, ce qui signifie que toutes les valeurs inférieures à la limite supérieure sont incluses, par exemple `(,3)`. De même, si la limite supérieure de la plage est omise, alors toutes les valeurs supérieures à la limite supérieure de la plage le sont.
+
+
+
+Les fonctions lower_inf et upper_inf testent respectivement les limites inférieure et supérieure infinies d'une plage.
+
+
+> Logique d’intervalles d’Allen : ensemble complet d’opérateurs booléens de base pour le positionnement relatif dans le temps.
+
+
+
+Deux intervalles A et B peuvent se positionner selon 13 configurations.
+
+### 1. Précède
+
+A _Précède_ B lorsque la borne supérieure de A est strictement inférieure à la borne inférieure de B.
+
+
+
+Allen|Postgres
+---|---
+A < B | A << B
+
+```sql
+select '[3,5]'::int4range << '[8,15]'::int4range;
+```
+
+### 2. Succède
+
+A _Succède_ à B lorsque la borne inférieure de A est strictement supérieure à la borne supérieure de B.
+
+
+
+Allen|Postgres
+------|---
+A > B | A >> B
+
+```sql
+select '[8,15]'::int4range >> '[3,5]'::int4range;
+```
+
+L'opérateur _Succède_ (>) est le transposé de l'opérateur _Précède_ (<).
+
+### 3. Égale
+
+A _Égale_ B lorsque les bornes inférieures et supérieures de chaque intervalle sont égales.
+
+
+
+Allen |Postgres
+------|---
+A = B | A = B
+
+
+```sql
+select '[3,10]'::int4range = '[3,10]'::int4range;
+```
+
+L'opérateur _Égale_ (=) est son propre transposé.
+
+### 4. Rencontre / rejoint
+
+A _Rencontre_ (meets) B lorsque la borne supérieure de A moins la borne inférieure de B est égale à une unité.
+
+Allen|Postgres
+---|---
+A m B | A -\|- B
+
+
+
+```sql
+select '[3,6]'::int4range -|- '[7,14]'::int4range;
+```
+
+L'opérateur _Rencontre_ (m) a comme transposé l'opérateur _Rencontré par_ (mi). `i` pour inverse.
+
+### 5. Chevauche / intersecte
+
+A chevauche (overlaps) B lorsque la borne supérieure de A est supérieure à la borne inférieure de B sans que la borne inférieure de A soit supérieure à la borne supérieure de B.
+
+
+
+Allen|Postgres
+-------|---
+A o B | A && B
+
+```sql
+select '[3,8]'::int4range && '[5,14]'::int4range;
+```
+
+L'opérateur _Chevauche_ (o) a comme transposé l'opérateur _Est chevauché par_ (oi). `i` pour inverse.
+
+### 6. Pendant
+
+A se déroule _Pendant_ (during) B lorque la borne inférieure de A est supérieure à la borne inférieure de B et que la borne supérieure de A est inférieure à la borne supérieure de B.
+
+
+
+Allen|Postgres
+------|---
+A d B | A <@ B
+
+```sql
+select '[7,10]'::int4range <@ '[5,14]'::int4range;
+```
+
+L'opérateur _Pendant_ (d) a comme transposé l'opérateur _Contient_ (di). `i` pour inverse.
+
+### 7. Contient
+
+A _Contient_ B lorsque la borne inférieure de A est inférieure à la borne inférieure de B et que la borne supérieure de A est supérieure à la borne supérieure de B.
+
+Allen |Postgres
+------|---
+A di B | A @> B
+
+
+
+```sql
+select '[5,14]'::int4range @> '[7,10]'::int4range;
+```
+
+L'opérateur _Contient_ (di) est le transposé de l'opérateur _Pendant_ (d).
+
+### 8. Commence
+
+A _Commence_ en même temps (starts) que B lorsque la borne inférieure de A est égale à la borne inférieure de B.
+
+
+
+Allen |Postgres
+------|---
+A s B | A &> B
+
+```sql
+select '[5,15]'::int4range &> '[5,10]'::int4range;
+```
+
+L'opérateur _Commence_ (s) a comme transposé l'opérateur _Débuté par_ (si). `i` pour inverse.
+
+### 9. Finit
+
+A _Finit_ en même temps (finishes) que B lorsque la borne supérieure de A est égale à la borne supérieure de B.
+
+
+
+Allen|Postgres
+------|---
+A f B | A &< B
+
+```sql
+select '[5,15]'::int4range &< '[10,15]'::int4range;
+```
+
+L'opérateur _Finit_ (f) a comme transposé l'opérateur _Terminé par_ (fi). `i` pour inverse.
+
+## Opérateurs combinatoires
+
+### Union
+
+
+
+```sql
+select '[5,10]'::int4range + '[8,15]'::int4range;
+```
+### Intersection
+
+
+
+```sql
+select '[5,10]'::int4range * '[8,15]'::int4range;
+```
+
+### Difference
+
+
+
+```sql
+select '[5,10]'::int4range - '[8,15]'::int4range;
+```
+
+- https://fr.wikipedia.org/wiki/-Alg%C3%A8bre_des_intervalles_d%27Allen
+- https://drops.dagstuhl.de/opus/volltexte/2018/9776/pdf/LIPIcs-TIME-2018-11.pdf
diff --git a/spatiale.md b/spatiale.md
new file mode 100644
index 0000000..76faff0
--- /dev/null
+++ b/spatiale.md
@@ -0,0 +1,91 @@
+Qu'est-ce qu'une base de données géographique ?
+
+ Contrairement aux bases de données traditionnelles, les BDG sont spécialisées dans la manipulation de données qui sont liées à des emplacements géographiques. Ces données peuvent inclure des points, des lignes, des polygones, et d'autres types de représentations spatiales.
+
+
+Outils et technologies
+
+ Logiciels SIG (Systèmes d'Information Géographique) : QGIS, ArcGIS, etc.
+ Bases de données spatiales : PostgreSQL/PostGIS, MySQL avec support spatial, etc.
+ Langages de programmation : Python (avec bibliothèques comme GeoPandas, Shapely), R (avec bibliothèques comme sf, sp), etc.
+
+## SRID
+
+## Représentation des données
+
+ogr2ogr -append -lco GEOMETRY_NAME=the_geom -lco SCHEMA=public -f "PostgreSQL" PG:"host=atelier.neotechweb.net port=5432 user=i2m dbname=i2m password=iutstdie18" -a_srs "EPSG:4326" -nln bound FRA_adm.gpkg
+
+https://guides.codepath.com/android/Genymotion-2.0-Emulators-with-Google-Play-support
+http://opengapps.org/
+
+
+Systèmes de Référence de Coordonnées :
+
+Elles supportent divers systèmes de projection et de référence de coordonnées (SRID - Spatial Reference System Identifier).
+Les données peuvent être transformées d'un système de référence à un autre pour l'analyse et la visualisation.
+
+SROD
+
+ESPG
+
+:SIG
+Système d'information géographique contient des données alphanumériques et des données spatiales.
+
+:OGC
+l'Open Geospatial Consortium est une organisation international pour développer et promouvoir des standards ouverts, les spécifications OpenGIS, afin de garantir l'interopérabilité des contenus, des services et des échanges dans les domaines de la géomatique et de l'information géographique.
+
+
+
+Le type de données que vous choisissez doit être déterminé par la zone de travail prévue de l'application que vous développez. Vos données couvriront-elles le globe ou une grande région continentale, ou sont-elles locales à un État, un comté ou une municipalité ?
+
+-
+
+- Vous stockez vos données en longitude/latitude et utilisez les fonctions définies sur GEOGRAPHY.
+
+- Si vous ne comprenez pas les projections et que vous ne voulez pas en apprendre davantage, et que vous êtes prêt à accepter les limitations des fonctionnalités disponibles dans GEOGRAPHY, il pourrait être plus simple pour vous d'utiliser GEOGRAPHY plutôt que GEOMETRY. Il vous suffit de charger vos données en longitude/latitude et de partir de là.
+
+:SIG
+ Système d'information géographique contient des données alphanumériques et des données spatiales.
+
+
+Créer un table aeroports contenant un nom une colonne de type point
+
+Ajouter les éléments suivant
+
+
+
+Quelles est la distance entre chaque points ?
+
+Créer une table perimetre contenant un nom et une colonne de type polygon
+
+Z 8,9 10,12 7,6
+
+Quels sont les aéroports dans la zone ?
+
+
+
+## Exercices
+
+-A Point(12, 3)
+-B Point(2, 7)
+-C Point(13, 4)
+-D Point(8, 11)
+-E Point(1, 4)
+
+truncate table newtable;
+truncate table newtable2
+;
+insert into newtable VALUES ('A', st_makepoint(12, 3));
+insert into newtable VALUES ('B', st_makepoint(2, 7));
+insert into newtable VALUES ('C', st_makepoint(15, 12));
+insert into newtable VALUES ('D', st_makepoint(17, 4));
+insert into newtable VALUES ('E', st_makepoint(7, 6));
+insert into newtable VALUES ('F', st_makepoint(10, 11));
+
+insert into newtable2 VALUES ('Z', st_makepolygon(ST_GeomFromText('LINESTRING(18 10, 13 15, 6 10, 8 8, 18 10)')));
+insert into newtable2 VALUES ('Y', st_makepolygon(ST_GeomFromText('LINESTRING(5 5, 7 8, 12 4, 5 5)')));
+insert into newtable2 VALUES ('X', st_makepolygon(ST_GeomFromText('LINESTRING(8 3, 14 2, 12 6, 8 3)')));
+
+
+select * from newtable n union all
+select * from newtable2;
diff --git a/window.md b/window.md
index ee08d16..c8f4ffb 100644
--- a/window.md
+++ b/window.md
@@ -130,25 +130,25 @@ ORDER BY est obligatoire lorsque LEAD() est utilisé. La séquence des lignes do
column_2 est la colonne qui défini l'ordre des lignes lors de la récupération de la valeur suivante. Vous pouvez spécifier plus d'une colonne.
-#### first_value (première valeur)
+#### première valeur
+
+```sql
first_value()
-
-```sql
```
-#### last_value (dernière valeur)
+#### dernière valeur
+
+```sql
last_value()
-
-```sql
```
-#### nth_value (nième valeur)
+#### nième valeur
-nth_value()
```sql
+nth_value()
```