MySQL - Получает номер строки на выборе

Я могу выполнить избранный оператор и получить номер строки, если объекты отсортированы?

У меня есть таблица как это:

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)
176
задан shA.t 26 April 2015 в 12:04
поделиться

2 ответа

Взгляните на это .

Измените ваш запрос на:

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

Последний выбор - ваш счет.

175
ответ дан 23 November 2019 в 20:22
поделиться

Для этого вы можете использовать переменные MySQL. Примерно так должно работать (правда, состоит из двух запросов).

SELECT 0 INTO @x;

SELECT itemID, 
       COUNT(*) AS ordercount, 
       (@x:=@x+1) AS rownumber 
FROM orders 
GROUP BY itemID 
ORDER BY ordercount DESC; 
11
ответ дан 23 November 2019 в 20:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: