Maison >base de données >tutoriel mysql >Comment ajouter des numéros de ligne aux données triées dans MySQL ?

Comment ajouter des numéros de ligne aux données triées dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-21 23:56:10620parcourir

How to Add Row Numbers to Sorted Data in MySQL?

Ajouter des numéros de ligne pour les données triées dans MySQL

Lorsque vous travaillez avec des données triées dans MySQL, obtenir le numéro de ligne de chaque enregistrement peut améliorer les informations fournies et faciliter une analyse plus détaillée. Cet article explique comment y parvenir en utilisant du SQL pur, en fournissant une solution qui évite le post-traitement en Java ou dans d'autres langages de programmation.

Structure des tables de base de données

Considérez le tableau suivant nommé « commandes » avec les champs « orderID » et « itemID » :

<code class="language-sql">mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| orderID     | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| itemID      | bigint(20) unsigned | NO   |     | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+</code>

Requête originale

Dans un premier temps, utilisez la requête pour obtenir le nombre de commandes pour chaque ID d'article :

<code class="language-sql">SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;</code>

Ajouter un numéro de ligne

Afin d'ajouter le numéro de ligne, vous pouvez modifier la requête comme suit :

<code class="language-sql">SET @rank=0;
SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID
ORDER BY ordercount DESC;
SELECT @rank;</code>

Description

  • SET @rank=0; : Ceci initialise la variable définie par l'utilisateur @rank à 0, qui agira comme un compteur pour les numéros de ligne.
  • SELECT @rank:=@rank 1 AS Rank, itemID, COUNT(*) as ordercount : Cette partie de la requête effectue les opérations suivantes :
    • Incrémentez @rank de 1 pour chaque ligne et attribuez la nouvelle valeur à la colonne "rank" dans le résultat.
    • Conservez les colonnes "itemID" et "ordercount" de la requête d'origine.
  • ORDER BY ordercount DESC : Cette clause garantit que les lignes sont triées par ordre décroissant en fonction du champ "ordercount".
  • SELECT @rank : L'instruction SELECT finale récupère la valeur finale de @rank, qui représente le nombre total de lignes dans l'ensemble de résultats.

Résultats améliorés

L'exécution de la requête modifiée fournira les résultats améliorés suivants :

<code>+------+--------+------------+
| rank | itemID | ordercount |
+------+--------+------------+
| 1    | 388    | 3          |
| 2    | 234    | 2          |
| 3    | 3432   | 1          |
| 4    | 693    | 1          |
| 5    | 3459   | 1          |
+------+--------+------------+</code>

Comme vous pouvez le voir, chaque ligne a désormais une colonne « rang » supplémentaire indiquant sa position dans l'ensemble de résultats triés.

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!

Déclaration:
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