ฉันสามารถรันคำสั่ง select และรับหมายเลขแถวได้หรือไม่หากรายการเรียงลำดับ?
ฉันมีโต๊ะแบบนี้:
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
ฉันสามารถเรียกใช้แบบสอบถามนี้เพื่อรับจำนวนการสั่งซื้อตาม ID:
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
สิ่งนี้ทำให้ฉันนับแต่ละคนitemID
ในตารางแบบนี้:
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
ฉันต้องการรับหมายเลขแถวด้วยดังนั้นฉันจึงบอกได้ว่านั่นitemID=388
คือแถวแรก234
คือที่สองเป็นต้น (โดยพื้นฐานแล้วการจัดอันดับของคำสั่งไม่ใช่เพียงการนับจำนวนดิบ) ฉันรู้ว่าฉันสามารถทำเช่นนี้ใน Java เมื่อฉันได้รับผลกลับ แต่ฉันสงสัยว่ามีวิธีการจัดการอย่างหมดจดใน SQL
ปรับปรุง
การตั้งค่าอันดับจะเพิ่มเข้าไปในชุดผลลัพธ์ แต่สั่งไม่ถูกต้อง:
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
(เรียงลำดับตามอันดับในลำดับ ASCending) ฉันเดาว่าเป็นสิ่งที่คุณหมายถึงแต่ไม่ได้รับคำสั่งอย่างถูกต้อง