Kann ich eine select-Anweisung ausführen und die Zeilennummer abrufen, wenn die Elemente sortiert sind?
Ich habe einen Tisch wie diesen:
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
Ich kann diese Abfrage dann ausführen, um die Anzahl der Bestellungen nach ID zu ermitteln:
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
Dies gibt mir eine Zählung von jedem itemID
in der Tabelle wie folgt:
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
Ich möchte auch die Zeilennummer erhalten, damit ich feststellen kann, dass itemID=388
es sich um die erste Zeile, 234
die zweite usw. handelt (im Wesentlichen die Rangfolge der Bestellungen, nicht nur eine Rohzählung). Ich weiß, dass ich dies in Java tun kann, wenn ich die Ergebnismenge zurückerhalte, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, dies nur in SQL zu handhaben.
Aktualisieren
Durch Festlegen des Ranges wird dieser zur Ergebnismenge hinzugefügt, jedoch nicht richtig geordnet:
mysql> SET @rank=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
-> FROM orders
-> GROUP BY itemID ORDER BY rank DESC;
+------+--------+------------+
| rank | itemID | ordercount |
+------+--------+------------+
| 5 | 3459 | 1 |
| 4 | 234 | 2 |
| 3 | 693 | 1 |
| 2 | 3432 | 1 |
| 1 | 388 | 3 |
+------+--------+------------+
5 rows in set (0.00 sec)
ORDER BY rank ASC
bestellen möchten, verwenden Sie (Reihenfolge nach Rang in aufsteigender Reihenfolge). Ich denke, das ist es, was du meinst, aber nicht richtig bestellt