Maison > base de données > tutoriel mysql > Comment calculer les différences de valeurs de ligne dans une table SQL ?

Comment calculer les différences de valeurs de ligne dans une table SQL ?

Susan Sarandon
Libérer: 2025-01-10 15:18:46
original
172 Les gens l'ont consulté

How to Calculate Row Value Differences in a SQL Table?

Calculer efficacement les différences de valeurs de ligne dans les tables SQL

Ce guide présente deux méthodes pour calculer la différence entre les valeurs de lignes consécutives dans une table SQL, en se concentrant sur une structure de table non séquentielle. La première méthode convient à toutes les versions de SQL, tandis que la seconde utilise des fonctions de fenêtre pour améliorer les performances dans SQL Server 2012 et versions ultérieures.

Méthode 1 : auto-jointure (toutes les versions SQL)

Cette approche utilise un LEFT JOIN pour comparer chaque ligne avec la ligne suivante en fonction d'un identifiant de ligne (rowInt dans cet exemple).

<code class="language-sql">SELECT
   current.rowInt,
   current.Value,
   ISNULL(next.Value, 0) - current.Value AS ValueDifference
FROM
   sourceTable AS current
LEFT JOIN
   sourceTable AS next
      ON next.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > current.rowInt)</code>
Copier après la connexion

La fonction ISNULL gère les cas où une ligne n'a pas de successeur (la dernière ligne), en attribuant une différence de 0 pour éviter les valeurs NULL.

Méthode 2 : fonction de fenêtre LEAD() (SQL Server 2012 et versions ultérieures)

Pour une efficacité accrue dans les versions plus récentes de SQL Server, la fonction de fenêtre LEAD() fournit une solution plus simple :

<code class="language-sql">SELECT
  RowInt,
  Value,
  LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value AS ValueDifference
FROM
  sourceTable</code>
Copier après la connexion

LEAD(Value, 1, 0) récupère la valeur de la ligne suivante (décalage 1), par défaut à 0 si aucune ligne suivante n'existe. Cela calcule directement la différence, éliminant ainsi le besoin d’une auto-jointure. Cette méthode est généralement plus rapide et plus lisible.

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