Autor Zpráva
Giga
Profil *
Potrebujem vyhladat maximum v tabulke. To viem ako urobit.
Ale da sa urobit v tom istom query aj nacitanie dalsich udajov z "maximalneho" riadku?
Alebo som odkazany na druhy dotaz?

Dakujem
TomášK
Profil
SELECT id, MAX(value), cokoliv1, cokoliv2 FROM table

dá ti to údaje z jednoho řádku, který má value = MAX(value). Pokud je víc stejných řádku, vybere si jeden z nich (tipuju náhodně?). V jiných databázích to fungovat nemusí.
Akacko
Profil
TomášK
To nebude fungovat. Musí se to ještě seskupovat:
SELECT MAX(value), id, cokoliv1, cokoliv2 FROM table GROUP BY id
např.
TomášK
Profil
Akacko
If you use a group function in a statement containing no GROUP BY clause, it is equivalent to grouping on all rows.
Bude :)
Kajman_
Profil *
Fungovat nebude asi ani jedno. Příklady jsou v databázovém faq.
TomášK
Profil
Kajman_
MySQL extends the use of GROUP BY so that you can use non-aggregated columns or calculations in the SELECT list that do not appear in the GROUP BY clause ... Do not use this feature if the columns you omit from the GROUP BY part are not constant in the group. The server is free to return any value from the group, so the results are indeterminate unless all values are the same.
Bude, bude a bude :) Ale jen v MySQL, jinde už ne.

Edit: dle http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=94653 to vypadá, že záleží i na verzi MySQL
Giga
Profil *
Ale vlastne co riesim:

select * from tabulka order by hladana_hodnota desc limit 1


No nie?
Kajman_
Profil *
Giga
Pokud stačí jeden řádek i v případě, že maximum má více řádků, tak ano. Pokud je např. sloupeček unikátní, bude to optimální řešení.

TomášK
server is free to return any value
Takže vrátí libovolný řádek, ne vždy ten, co má nejvyšší hodnotu v nějakém sloupečku.
TomášK
Profil
Kajman_
The server is free to return any value from the group
Rozumím tomu tak, že mi vrátí jeden řádek ze skupiny záznamů, které mají maximální hodnotu, i se to tak podle mých zkušeností chová. Používám to v jedné aplikaci a narazil jsem, když jsem to zkoušel přepsat do MSSQL, kde (pokud vím) nic podobného není, proto si to pamatuju. Bezpečnější (míněno odolnější vůči různým nastavením/datázím) je určitě verze z FAQ, nenapadlo mě, že i chování GROUP BY se dá nastavit, zas jsem o něco chytřejší.
Kajman_
Profil *
Ale do group se zahrnou všechny řádky, ne jen ty s maximální hodnotou. Stačí si to zkusit - ona je šance, že to vrátí správný řádek, ale je stejně velká jako u ostatních řádků.
TomášK
Profil
Máš pravdu, neuvědomil jsem si, že tentokrát je skupina celá tabulka. Dřív než jsem si to psal jsem si to vyzkoušel, jinak bych tu za to tak nebojoval. Bohužel jsem ten dotaz vymyslel tak nešikovně, že jsem se trefil do toho jednoho správného řádku a nedošlo mi, že to je náhoda.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0