Portál AbcLinuxu, 12. května 2024 23:00


Dotaz: Mysql seskupení

1.12.2008 21:24 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Mysql seskupení
Přečteno: 335×
Odpovědět | Admin
Mám databázovou tabulku se sloupci id(primání klíč), ico, title, region. district,.... Potřeboval bych aby se při seskupení(GROUP BY ico, title) vyšla nikoliv položka s nižším id, ale ta z vyšším. Zkoušel jsem dotaz ve tvaru:
SELECT id, ico, title FROM tabulka WHERE state=1 AND (spec_id=4 AND city='Praha') GROUP BY ico title ORDER BY title ASC;
Ten mi ale vrací vždy položku s nižším id, když jsou dvě stejné.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.12.2008 21:49 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Mysql seskupení
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud se provádí seskupení, tak se spojí do "super-řádků" stejné hodnoty a na zbylé sloupce (tj. ty, kteří se neúčastní seskupení) se musí použít agregační funkce (protože jinak SQL server neví, který řádek by měl vlastně vrátit. Zkusil bych něco jako MAX(id). BTW - tohle skutečně server vezme jako platný dotaz??
I am always ready to learn although I do not always like to be taught. (W. Churchill)
1.12.2008 22:04 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: Mysql seskupení

V tom původním jsem udělal při pastování chybu v GROUP BY má být mezi ico a title čárka.

Díky za navedení. Výsledný dotaz jsem udělal takto:
SELECT id, ico, title FROM tabulka WHERE id IN( SELECT MAX(id) FROM tabulka WHERE state=1 AND spec_id=4 AND city='Praha' GROUP BY ico, title)  ORDER BY title ASC;
a vypadá to, že funguje.
1.12.2008 22:23 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Mysql seskupení
Tohle by mělo dělat totéž:
SELECT MAX(id), ico, title FROM tabulka 
WHERE state=1 AND spec_id=4 AND city='Praha' 
GROUP BY ico, title 
ORDER BY title ASC
PS: Prosím, zalamujte uvnitř pre (vodorovné posouvání je značně nepohodlné). Dík
I am always ready to learn although I do not always like to be taught. (W. Churchill)
1.12.2008 22:33 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: Mysql seskupení
To by mi získalo jenom maximální id, a ne záznam s maximálním id, ne?
1.12.2008 23:11 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Mysql seskupení
Zkoušel jste to? Možná, že nechápu, co vlastně chcete, ale ty dotazy by měly být ekvivalentní.

PS: How to select the first/least/max row per group in SQL.
I am always ready to learn although I do not always like to be taught. (W. Churchill)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.