2013-01-19 37 views
7

Tôi đã thực hành một số SQL khi điều này đánh tôi. Tôi muốn xem có bao nhiêu lần một mặt hàng nào đó xuất hiện và từ đó nhận được hàng hóa xuất hiện nhất.Nhận MAX từ một GROUP BY

Điều này cho thấy bao nhiêu lần mỗi hàng hóa đi lên:

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 | 
+-----------------------------------+ 

Tôi đang cố gắng để có được hàng với mức cao nhất nhưng đó là tất cả sai:

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

đúng cách làm là gì điều này?

Trả lời

9

LƯU Ý: truy vấn sẽ không xử lý hồ sơ trùng lặp có tối đa COUNT

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

Nhưng ý chí này,

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 
) 
+1

xem câu trả lời cập nhật của tôi ': D' –

+0

@enchance yes, cái đầu tiên nhưng thứ hai thì không. xem xét kỷ lục này 'TOMATOES, CHERRY | 18', 'GALIA MELON | 18', 'PERSIAN MELON | 10' –

+0

mục đầu tiên sẽ chỉ hiển thị 'TOMATOES, CHERRY | 18' nhưng cái thứ hai cả "TOMATOES, CHERRY | 18' và 'GALIA MELON | 18' –

0

Tôi sẽ viết:

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

Hãy thử truy vấn này

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

'MAX (COUNT (hàng hóa)) 'là không hợp lệ! –

0

Nó được tốt chỉ cần thêm desc để đặt hàng bởi

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

hàng đầu tiên sẽ có giá trị tối đa và thêm giới hạn để chỉ có một bản ghi này

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

Có vẻ như bạn đang làm đúng. Ngoại trừ ORDER BY yêu cầu họ trong đơn đặt hàng ASC. làm cho nó giảm dần

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

'MAX (COUNT (hàng hóa))' không hợp lệ! –