Autor | Zpráva | ||
---|---|---|---|
Giga Profil * |
#1 · Zasláno: 14. 5. 2009, 18:37:11
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 |
#2 · Zasláno: 14. 5. 2009, 18:42:55
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 |
#3 · Zasláno: 14. 5. 2009, 18:51:40
TomášK
To nebude fungovat. Musí se to ještě seskupovat: SELECT MAX(value), id, cokoliv1, cokoliv2 FROM table GROUP BY id |
||
TomášK Profil |
#4 · Zasláno: 14. 5. 2009, 19:01:15
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 * |
#5 · Zasláno: 14. 5. 2009, 19:53:49
Fungovat nebude asi ani jedno. Příklady jsou v databázovém faq.
|
||
TomášK Profil |
#6 · Zasláno: 14. 5. 2009, 20:27:37 · Upravil/a: TomášK
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 * |
#7 · Zasláno: 14. 5. 2009, 21:29:27
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 |
#9 · Zasláno: 14. 5. 2009, 22:49:47
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 * |
#10 · Zasláno: 15. 5. 2009, 08:33:46
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 |
#11 · Zasláno: 15. 5. 2009, 11:53:53
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.
|
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0