Autor | Zpráva | ||
---|---|---|---|
MaK Profil |
#1 · Zasláno: 22. 5. 2014, 09:11:52
Mám tuto tabulku:
a b 1 1 1 1 1 2 1 2 1 2 2 3 2 4 2 5 2 5 2 5 a na výstupu potřebuju dostat: 1 2 2 5 Druhý sloupec výsledku obsahuje nejčastěji vyskytující se hodnotu ze sloupce B pro unikátní hodnotu sloupce A. Dokážu to pomocí: select a, (select b from xxx as x2 where x2.a=x1.a group by b order by count(*) desc limit 1) from xxx as x1 group by a Je možné, se zbavit toho selektu v selektu? Napsat to jinak? MaK |
||
juriad Profil |
#2 · Zasláno: 22. 5. 2014, 09:49:07
Ano, je to variace na dotaz ve FAQ: Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení řádků s maximální (minimální) hodnotou
Oproti tvému dotazu to má výhodu tu, že databáze nemusí pokládat velké množství poddotazů (stejný počet, jako je hodnot a). Pozor však na to, že dotaz může vrátit více řádek, než bys chtěl; rozdíl je v tom, že ty používáš LIMIT 1, který v případě několika stejně častých záznamů vrátí nějaký jeden z nich. SELECT pocty.a, pocty.b FROM (SELECT a, b, Count(*) pocet FROM tab GROUP BY a, b) pocty JOIN (SELECT a, Max(pocet) maximum FROM (SELECT a, b, Count(*) pocet FROM tab GROUP BY a, b) pocty GROUP BY a) maxima ON pocty.a = maxima.a AND pocty.pocet = maxima.maximum Dotaz si můžeš vyzkoušet online: http://sqlfiddle.com/#!2/03b1ab/2 |
||
MaK Profil |
#3 · Zasláno: 22. 5. 2014, 10:12:15
juriad:
Děkuju, to je přesně ono. |
||
Časová prodleva: 10 let
|
0