Получите MAX из группы GROUP BY

Я тренировал некоторый SQL, когда это ударило меня. Я хотел посмотреть, сколько раз появился какой-то товар, и оттуда получается тот товар, который придумал больше всего.

Это показывает, сколько раз каждый товар появляется:

mysql> SELECT commodity, COUNT(commodity) count FROM orders GROUP BY commodity ORDER BY count;
+----------------------+------------+
| commodity | count |
+----------------------+------------+
| PERSIAN MELON | 4 |
| BEANS | 6 |
| CASABA | 10 |
| ASPARAGUS | 11 |
| EGGPLANT | 12 |
| TOMATOES, CHERRY | 16 |
| GALIA MELON | 18 |
+-----------------------------------+

Я пытаюсь получить строку с наивысшим значением, но все это неправильно:

mysql> SELECT commodity, MAX(COUNT(commodity)) count FROM orders GROUP BY commodity ORDER BY count;

Каков правильный способ сделать это?

5 ответов

ПРЕДОСТЕРЕЖЕНИЕ: запрос не будет обрабатывать повторяющиеся записи с максимальным значением COUNT

SELECT commodity, COUNT(commodity) `count` 
FROM orders 
GROUP BY commodity
ORDER BY `count` DESC 
LIMIT 1

Но это будет,

SELECT commodity, COUNT(commodity) `count` 
FROM orders 
GROUP BY commodity
HAVING COUNT(commodity) =
(
 SELECT MAX(`COUNT`) 
 FROM
 (
 SELECT COUNT(commodity) `count` 
 FROM orders 
 GROUP BY commodity
 ) s
)


Попробуйте этот запрос

SELECT commodity,COUNT(commodity) AS count 
 FROM orders
GROUP BY commodity
ORDER BY count desc
 LIMIT 1;


Это нормально, просто добавьте desc для заказа

SELECT commodity, COUNT(commodity) count FROM orders GROUP BY commodity ORDER BY count DESC;

первая строка будет иметь максимальное значение и добавить ограничение, чтобы получить только одну запись

SELECT commodity, COUNT(commodity) count FROM orders GROUP BY commodity ORDER BY count DESC LIMIT 1;


Я бы написал:

select * from (SELECT commodity, COUNT(commodity) count FROM orders GROUP BY commodity ORDER BY count desc) where rownum <2;


Похоже, вы делаете все правильно. За исключением ORDER BY упорядочивает их в порядке ASC. сделать его нисходящим

mysql> SELECT commodity, COUNT(commodity) count FROM orders GROUP BY commodity ORDER BY count DESC;

licensed under cc by-sa 3.0 with attribution.