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>
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>
La requête SQL ci-dessus produit :
<code>difference ---------- NULL 5 5 5</code>
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!