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
Libérer: 2025-01-21 23:56:10
original
585 Les gens l'ont consulté

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 » :

mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| orderID     | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| itemID      | bigint(20) unsigned | NO   |     | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+
Copier après la connexion

Requête originale

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

SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
Copier après la connexion

Ajouter un numéro de ligne

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

SET @rank=0;
SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID
ORDER BY ordercount DESC;
SELECT @rank;
Copier après la connexion

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>
Copier après la connexion

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 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