Maison > base de données > tutoriel mysql > Comment puis-je calculer la différence entre des lignes consécutives dans SQL à l'aide des fonctions de fenêtre ?

Comment puis-je calculer la différence entre des lignes consécutives dans SQL à l'aide des fonctions de fenêtre ?

Susan Sarandon
Libérer: 2025-01-23 03:17:08
original
615 Les gens l'ont consulté

How Can I Calculate the Difference Between Consecutive Rows in SQL Using Window Functions?

Calculer efficacement les différences entre les lignes SQL adjacentes avec des fonctions de fenêtre

L'analyse des données implique fréquemment de déterminer la différence entre les lignes successives d'un ensemble de données. Les fonctions de fenêtre SQL offrent une solution élégante, notamment la fonction LAG.

Exploiter la LAG Fonction

La fonction LAG récupère une valeur d'une ligne précédente dans une fenêtre définie. La clause OVER spécifie l'ordre de la fenêtre (par exemple, ORDER BY Id). LAG renvoie ensuite la valeur de la colonne désignée de la ligne immédiatement avant la ligne actuelle dans l'ordre spécifié.

La requête SQL suivante illustre le calcul de la différence entre des entrées de « valeur » consécutives dans une table nommée « table » :

<code class="language-sql">SELECT value - LAG(value) OVER (ORDER BY Id) AS difference FROM table;</code>
Copier après la connexion

Cela génère un nouveau tableau montrant la différence entre la « valeur » de chaque ligne et la « valeur » de son prédécesseur.

Résoudre les lacunes potentielles dans les séquences d'identification

L'utilisation d'une colonne d'identification pour commander nécessite d'être conscient des lacunes potentielles dans la séquence d'identification. La soustraction directe de l'ID précédent (Id-1) peut donner lieu à des calculs de différence inexacts si les ID ne sont pas consécutifs.

Sortie illustrative

Étant donné un "tableau" avec ces données :

<code>Id | value
----- | -----
1 | 10
2 | 15
3 | 20
4 | 25</code>
Copier après la connexion

La requête SQL ci-dessus produit :

<code>difference
----------
NULL
5
5
5</code>
Copier après la connexion

Notez le NULL pour la première ligne, car il n'y a pas de ligne précédente avec laquelle comparer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal