Autor Zpráva
Dexx
Profil *
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
select cislo from tabulka group by cislo order by count(cislo) desc limit 1
Leo
Profil
"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 *
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
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 *
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 *
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 *
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 *
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 *
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 *
Mrkněte do zmiňovaných faq.
Dexx
Profil *
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
Dexx
select t1.cislo from tabulka t1 where t1.hodnota = (select max(t2.hodnota) from tabulka t2))
Dexx
Profil *
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
tak se zobrazí stejně číslo 45
a hodnota 156328, která je u čísla 45, není nejvyšší hodnotou v tabulce?
Dexx
Profil *
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
(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 *
nightfish
Děkuji, funguje to skvěle a omlouvám se, za špatné vyjádření problému.
Leo
Profil
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
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 *
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)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0