group by?

Jan Serak sherry na pikebo.cz
Pátek Září 10 17:08:11 CEST 1999


Hanus Adler wrote:
>
> Potrebuji vybrat pro kazdou hodnotu odkazu radek s poslednim datem... a
> nemohu na to prijit. "GROUP BY odkaz" vybere sice jeden radek pro kazdy
> odkaz, ale zda se mi, ze zcela nahodne... a ja potrebuji ten posledni.

A posleze:

Hanus Adler wrote:
> 
> On 8 Sep 1999 09:24:33 +0200, radim.kubacki na rtscs.cz wrote:
> >Rekl bych, ze se datum da usporadat, tak by snad mohlo fungovat:
> >
> >select odkaz, max(datum)
> >from ...
> >group by odkaz
> 
> to bohuzel nefunguje, sice to zjisti spravnou hodnotu max(datum), ale
> odkaz ma hodnotu zcela nahodne vybranou...

Uvedeny SELECT dela presne to, co jste chtel v prvnim prispevku.
Pokud chcete nejnovejsi datum pro dany odkaz, staci
select max(datum) from ... where odkaz='pozadovany odkaz';

Klauzule GROUP BY ma vyznam ve spojeni s agregacni funkci
(max, min, count, sum, avg), kdy hodnota usporadane n-tice
sloupcu z GROUP BY definuje rozpad mnoziny vybranych radku
podle WHERE podle rovnosti definovane usporadane n-tice,
a pro kazdou tridu tohoto rozpadu se spocte agregat.
Pokud jsou kladeny nejake dalsi omezovaci podminky pro
"agregovane" zaznamy, je treba je definovat klauzuli HAVING
(napr. hledame odkazy, ktere maji vic nez jeden radek:
	select odkaz,count(*) from ... where
	group by odkaz
	having count(*)>1;
).
	
Poradi, v jakem ma SELECT... GROUP BY...
agregovane radky "vracet", neni normou SQL definovano,
muze byt libovolne.

--
Jan Serak


Další informace o konferenci Databases