Я могу выполнить избранный оператор и получить номер строки, если объекты отсортированы?
У меня есть таблица как это:
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
Я могу затем выполнить этот запрос для получения количества заказов идентификатором:
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)
Взгляните на это .
Измените ваш запрос на:
SET @rank=0;
SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID
ORDER BY ordercount DESC;
SELECT @rank;
Последний выбор - ваш счет.
Для этого вы можете использовать переменные MySQL. Примерно так должно работать (правда, состоит из двух запросов).
SELECT 0 INTO @x;
SELECT itemID,
COUNT(*) AS ordercount,
(@x:=@x+1) AS rownumber
FROM orders
GROUP BY itemID
ORDER BY ordercount DESC;