Autor | Zpráva | ||
---|---|---|---|
Dexx Profil * |
#1 · Zasláno: 25. 11. 2008, 22:05:26
Dobrý den, mám tabulku složenou ze sloupců id a číslo
a já potřebuji sestavit dotaz, který mi vybere nejčastěji se opakované číslo ve sloupci číslo např. pokud budou ve sloupci číslo takovéto záznamy: 11 26 58 58 2 11 11 tak aby se vypsalo číslo 11 Děkuji |
||
Alphard Profil |
#2 · Zasláno: 25. 11. 2008, 22:14:48
select cislo from tabulka group by cislo order by count(cislo) desc limit 1 |
||
Leo Profil |
#3 · Zasláno: 25. 11. 2008, 23:29:17
"select cislo from tabulka group by cislo order by count(cislo) desc limit 1"
A kdyz bude stejne casta 11 i treba 25? Leo |
||
Sicario Profil * |
#4 · Zasláno: 26. 11. 2008, 00:44:11
Leo
Tak jsem na dobrou noc neco splacal. select * from (select cislo, count(cislo)as c from t1 group by cislo) as xx where xx.c = (select max(x.c) from (select count(cislo) as c from t1 group by cislo) as x) |
||
Alphard Profil |
#5 · Zasláno: 26. 11. 2008, 14:27:04
Leo
ano, to je problém, ale odpovídám na dotaz, uvedený příklad bude splněn jak to chcete řešit, když neznáte další informace, např. jestli rozhodnout podle id, vrátit více čísel, chybu , vybrat to větší/menší atd. |
||
Dexx Profil * |
#6 · Zasláno: 26. 11. 2008, 15:22:09
Sicario
Děkuji, funguje to přesně tak, jak má... ještě bych se chtěl zeptat, co by bylo potřeba v tomto dotazu upravit/přepsat, aby to vypsalo číslo u kterého je nejvyšší hodnota ve sloupci hodnota |
||
Sicario Profil * |
#7 · Zasláno: 26. 11. 2008, 17:53:08
Dexx
Mozna takhle: select * from (select cislo, count(cislo)as c, avg(hodnota) as hodnota from t1 group by cislo) as xx where xx.c = (select max(x.c) from (select count(cislo) as c from t1 group by cislo) as x) order by xx.hodnota desc Takhle upraveny dotaz by mel vypsat nejcasteji se opakujici cisla, serazena podle sloupce `hodnota`, ktery vznikne jako prumer vsech hodnot pro dane cislo. Mnou napsany dotaz obsahuje tri poddotazy. Zajimalo by me, jestli se da jejich pocet snizit. |
||
Dexx Profil * |
#8 · Zasláno: 26. 11. 2008, 21:29:15
Sicario
Omlouvám se, špatně jsem se vyjádřil. Potřebuji vytvořit dotaz, který mi vybere hodnotu ze sloupce číslo hodnotu, ale ten sloupec číslo vybere na základě nejvyšší hodnoty ve sloupci hodnota Snad jsem se teď dobře vyjádřil a ještě se jednou omlouvám. Jinak to, že se dotaz skládá z více poddotazů mi ani tak nevadí, ovšem kdyby se našel někdo, jak to "vylepšit/zmenšit", tak by se asi nikdo nezlobil ;) |
||
Kajman_ Profil * |
#9 · Zasláno: 26. 11. 2008, 21:42:53
Jestli chcete řádky, které mají v nějakém sloupci maximální hodotu, zkuste se podívat do faq. Pokud máte na mysli něco jiného, zkuste uvést příklad. Jazykovou konstrukcí "hodnotu ze sloupce číslo hodnotu" se špatně prokousává.
|
||
Dexx Profil * |
#10 · Zasláno: 26. 11. 2008, 23:40:14
Kajman_
Raději uvedu příklad: Složení tabulky ->id ->číslo ->hodnota Záznamy v tabulce ID | ČÍSLO | HODNOTA 1 | 45 | 625 2 | 45 | 3945 3 | 99 | 95842 4 | 27 | 523 5 | 13 | 2563 V tomto případě by to vypsalo číslo 99, jelikož má ve sloupci hodnota nejvyšší číslo (hodnotu) |
||
Kajman_ Profil * |
#11 · Zasláno: 27. 11. 2008, 07:52:19
Mrkněte do zmiňovaných faq.
|
||
Dexx Profil * |
#12 · Zasláno: 27. 11. 2008, 13:44:32
Kajman_
Pokud jsem to dobře pochopil, jedná se o tento příklad: -- pro každou kategorii najdi všechny řádky, kde je nejvyšší cena pro danou kategorii select t1.* from tabulka t1, (select t2.kategorie, max(t2.cena) cena from tabulka t2 group by t2.kategorie) t3 where t1.kategorie=t3.kategorie and t1.cena=t3.cena; ovšem zde se pracuje s více tabulkami ne? Zkusil jsem nahradit slova kategorie =>číslo a slova cena =>hodnota ale vypisuje to špatné číslo :/ |
||
nightfish Profil |
#13 · Zasláno: 27. 11. 2008, 14:13:35
Dexx
select t1.cislo from tabulka t1 where t1.hodnota = (select max(t2.hodnota) from tabulka t2)) |
||
Dexx Profil * |
#14 · Zasláno: 27. 11. 2008, 15:54:35
nightfish
Díky funguje to, ale zkusil jsem do db přidat následující řádky Záznamy v tabulce ID | ČÍSLO | HODNOTA 1 | 45 | 156328 2 | 38 | 156328 3 | 38 | 156328 tak se zobrazí stejně číslo 45 zkusil jsem nakonec dotazu přidat ORDER BY hodnota ASC, ale nepomohlo :( |
||
nightfish Profil |
#15 · Zasláno: 27. 11. 2008, 16:59:13
„tak se zobrazí stejně číslo 45 “
a hodnota 156328, která je u čísla 45, není nejvyšší hodnotou v tabulce? |
||
Dexx Profil * |
#16 · Zasláno: 27. 11. 2008, 17:05:48
nightfish
ano je, ovšem u číslo 45 je ta hodnota pouze 1x, narozdil od čísla 38 (potřebuji rozlišit i toto) |
||
nightfish Profil |
#17 · Zasláno: 27. 11. 2008, 17:20:44
„(potřebuji rozlišit i toto)“
pro příště by bylo jednodušší to napsat rovnou, ať nemusíme ke konečnému výsledku docházet iterativně pak by mohlo fungovat zhruba toto: select t1.cislo from tabulka t1 where t1.hodnota = (select max(t2.hodnota) from tabulka t2)) group by t1.cislo order by count(t1.cislo) desc limit 1 |
||
Dexx Profil * |
#18 · Zasláno: 27. 11. 2008, 17:51:18
nightfish
Děkuji, funguje to skvěle a omlouvám se, za špatné vyjádření problému. |
||
Leo Profil |
#19 · Zasláno: 27. 11. 2008, 18:14:51
select t1.cislo from tabulka t1 where t1.hodnota = (select max(t2.hodnota) from tabulka t2))
group by t1.cislo order by count(t1.cislo) desc limit 1 Limit 1? A co kdyz bude to cislo bude u 45 i u 38 2x? Leo |
||
nightfish Profil |
#20 · Zasláno: 27. 11. 2008, 19:17:50
„Limit 1? A co kdyz bude to cislo bude u 45 i u 38 2x? Leo“
tak se ve shodě se specifikací (nebylo specifikováno) vezme jedna z těchto hodnot |
||
Dexx Profil * |
#21 · Zasláno: 27. 11. 2008, 20:30:52
Leo
To už pro mne není až tak důležité...ani mne nenapadá, jak by se to řešilo, maximálně podle ID (větší by mělo přednost) |
||
Časová prodleva: 16 let
|
0