Vyzaduje group by order by?

Honza Pazdziora adelton na informatics.muni.cz
Středa Srpen 9 09:49:53 CEST 2000


On Tue, Aug 08, 2000 at 11:22:07PM +0200, Ondrej Koala Vacha wrote:
> 
> muze se stat, ze 
> 
> select xx,sum(ks) group by xx order by yy
		^^^^^
		predpokladam, ze tady je jeste nejake from table

Oracle Vam na tohle rekne

	ORA-00979: not a GROUP BY expression

a ukaze na to yy. Proste ten sloupec yy tam neexistuje, existuje jenom
to, co pustite ven pres group by, tedy sloupce pres ktere groupujete
nebo agregace.

> muze vratit vice radku nez 1 se stejnym xx? Jinymi slovy, 
> provede se automaticky jeste trideni podle sloupce v group by, nebo se to
> musi udelat explicitne? Zajimalo by me, jak je to podle normy. Mysql ted
> order by nevyzaduje, ale mam dojem, ze v jakesi verzi bez order by vratila
> prave vic radku nez jeden - ale to mozna byl bug ve vyvojove verzi. 

Ale Vy prece muzete mit zaznamy

	xx	yy	ks
	123	8	1
	123	4	2
	098	1	1
	098	8	2

Vysledek je pak

	xx	sum(ks)
	123	3
	098	3

A jak byste tady chtel tridit podle yy? Ve vysledku mate pouze sloupce
xx a sum(ks) a ty yy jdou napric nimi.

V MySQL (3.23.13) Vam to projde a projde to proto, ze v MySQL Vam
projde

	select xx,yy,sum(ks) from table group by xx

A na miste yy bude nahodne hodnota z nektereho z tech radku.
Zatimco Oracle Vam na tohle zase rekne, ze not a GROUP BY expression.

Z cehoz plyne, ze i kdyz to v MySQL projde, tak to nedava smysluplne
vysledky, protoze ktera hodnota yy se pouzije neni nikde receno.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, DBI, Oracle, MySQL, auth. WWW servers, MTB, Spain, ...
------------------------------------------------------------------------


Další informace o konferenci Test