Tôi có thể chạy câu lệnh chọn và lấy số hàng nếu các mục được sắp xếp không?
Tôi có một cái bàn như thế này:
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
Sau đó tôi có thể chạy truy vấn này để nhận số lượng đơn đặt hàng theo ID:
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
Điều này cho tôi một số lượng trong mỗi itemID
bảng như thế này:
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
Tôi cũng muốn lấy số hàng, vì vậy tôi có thể nói đó itemID=388
là hàng đầu tiên, 234
là thứ hai, v.v (về cơ bản là thứ hạng của các đơn hàng, không chỉ là số liệu thô). Tôi biết tôi có thể làm điều này trong Java khi tôi lấy lại kết quả, nhưng tôi đã tự hỏi liệu có cách nào để xử lý nó hoàn toàn bằng SQL không.
Cập nhật
Đặt thứ hạng sẽ thêm nó vào tập kết quả, nhưng không được sắp xếp đúng:
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
(sắp xếp theo thứ hạng theo thứ tự ASCending). Tôi đoán đó là những gì bạn muốn nói nhưng không được sắp xếp đúng cách