2013-01-19 16 views
7

Stavo praticando un po 'di SQL quando questo mi ha colpito. Volevo vedere quante volte è spuntata una certa merce e da lì ottenere il prodotto che è venuto il più.Ottieni MAX da un GRUPPO DA

Questo mostra quante volte ogni merce viene in su:

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

Sto cercando di ottenere la riga con la più alta, ma è tutto sbagliato:

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

Qual è il modo giusto di fare Questo?

risposta

9

ATTENZIONE: la query non gestirà i record duplicati avere il massimo COUNT

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

Ma questa volontà,

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

vedere la mia risposta aggiornata ': D' –

+0

@enchance si, il primo ma il secondo no. considera questo disco "POMODORINI, CILIEGIA | 18', 'GALIA MELON | 18', 'MELONE PERSIANO | 10' –

+0

il primo mostrerà solo 'POMODORI, CILIEGIA | 18' ma il secondo entrambi 'POMODORI, CILIEGIA | 18' e 'GALIA MELON | 18' –

0

avrei scritto:

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

Prova questa ricerca

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

'MAX (COUNT (commodity))' è non valido! –

0

E 'bene solo aggiungere disc su ordinazione da

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

prima fila avrà valore massimo e aggiungere limite per ottenere solo questo record

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

Sembra che tu stia facendo bene. Tranne ORDER BY ordina nell'ordine ASC. rendono decrescente

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

'MAX (COUNT (commodity))' non è valido! –