2010-04-05 17 views
11

Ho una tabella all'interno del mio database che ha molti record, alcuni record condividono lo stesso valore per una delle colonne. per esempio.Selezione del valore più comune dalla relazione - Istruzione SQL

| id | name | software | 
______________________________ 
| 1 | john | photoshop | 
| 2 | paul | photoshop | 
| 3 | gary | textmate | 
| 4 | ade | fireworks | 
| 5 | fred | textmate | 
| 6 | bob | photoshop | 

Desidero restituire il valore del software più comune che si verifica, utilizzando un'istruzione SQL.

Quindi nell'esempio sopra l'istruzione SQL richiesta restituirebbe 'photoshop' come si verifica più di qualsiasi altro software.

È possibile?

Grazie per il vostro tempo.

+2

@Ronnie: quale versione di base di dati stai usando? MySQL? Oracle? –

+0

Scusa, sto usando MySQL. – Ronnie

+0

possibile duplicato di [Ottieni il valore più comune in SQL] (http://stackoverflow.com/questions/344665/get-most-common-value-in-sql) – user2284570

risposta

22
select top 1 software 
from your_table 
group by software 
order by count(*) desc 
+0

Grazie Carl, cosa significa la parte "top 1" ? Grazie per la sua pronta risposta. – Ronnie

+1

@Ronnie ritorna dalla parte superiore delle partite dalla query, che in questo caso sono scendendo, il # di record indicato – msarchet

+0

Quindi, questa dichiarazione sarà ordinare tutti i record in gruppi che iniziano con il gruppo dei software più comuni e la discendente. Ma il 'top 1' seleziona solo il valore dal primo gruppo? – Ronnie

4

Dipende se si desidera utilizzare SQL standard o venditore estensioni specifiche (un altro poster ha una query "top N", che è non standard). Una soluzione standard sarebbe.

SELECT software, COUNT(1) 
FROM tablename 
GROUP BY software 
HAVING COUNT(1) = (
    SELECT MAX(sc) FROM (
    SELECT software, COUNT(1) sc 
    FROM tablename 
    GROUP BY software 
) 
) 

Nota: questo può restituire più righe se diversi pezzi di software sono legati per la maggior parte occorrenze.

0

Si può fare in molti modi, ma il modo più semplice sarebbe questo

SELECT item 
FROM (SELECT item FROM your_table GROUP BY item ORDER BY COUNT(*) desc) 
WHERE ROWNUM<=1; 
+0

MySQL non ha 'ROWNUM'. – Barmar

Problemi correlati