# Group By mit mehreren Spalten



## heidiweber (21. Mai 2009)

Hallo,

ich habe folgende Tabelle:


```
ID          var1       var2       var3       artikel    preis 
1	aaa1	aaa2	aaa3	tempo	36
1	aaa1	aaa2	aaa3	haus	51
1	aaa1	aaa2	aaa3	stecken	92
1	aaa1	aaa2	aaa3	blume	23
1	aaa1	aaa2	aaa3	auto	22
2	bbb1	bbb2	bbb3	computer	32
2	bbb1	bbb2	bbb3	heizung	56
2	bbb1	bbb2	bbb3	baum	46
2	bbb1	bbb2	bbb3	putz	65
3	ccc1	ccc2	ccc3	rasen	36
3	ccc1	ccc2	ccc3	fenster	47
3	ccc1	ccc2	ccc3	fernseher	47
3	ccc1	ccc2	ccc3	pulli	34
4	ddd1	ddd2	ddd3	fahrrad	87
```

Ich benötige var1, var2, var3, artikel des jeweiligen MAX(preis).

Das macht schon fast das:
select max(preis) from aggregieren GROUP BY id;

Nur wenn ich das probiere:
select var1, var2, var3, artikel, max(preis) from aggregieren GROUP BY id;

Kommt Fehlermeldung: Kein Group-By Ausdruck.

Nur wie macht man das?
Vielen dank
Grüße
Heidi


----------



## byte (21. Mai 2009)

heidiweber hat gesagt.:


> Nur wenn ich das probiere:
> select var1, var2, var3, artikel, max(preis) from aggregieren GROUP BY id;
> 
> Kommt Fehlermeldung: Kein Group-By Ausdruck.



Bei einem GROUP BY darfst Du nur Spalten selektieren, auf die Du auch gruppierst oder Aggregatfunktionen (die gehen auf alle Spalten).

Du könntest es mit einem Subselect versuchen, z.B. so in der Art (ungetestet):


```
select a1.var1, a1.var2, a1.var3, a1.artikel, 
(
   select max(a2.preis) 
   from aggregieren as a2 
   where a2.id = a1.id 
   group by a2.id
) 
from aggregieren as a1;
```


----------



## heidiweber (21. Mai 2009)

Hallo,

leider bringt der Select nicht das gewünschte Ergebnis.

Das kommt dabei heraus:


```
aaa1	aaa2	aaa3	tempo	92
bbb1	bbb2	bbb3	heizung	65
ccc1	ccc2	ccc3	pulli	47
ddd1	ddd2	ddd3	fahrrad	87
aaa1	aaa2	aaa3	auto	92
ccc1	ccc2	ccc3	fenster	47
aaa1	aaa2	aaa3	haus	92
bbb1	bbb2	bbb3	baum	65
aaa1	aaa2	aaa3	blume	92
aaa1	aaa2	aaa3	stecken	92
ccc1	ccc2	ccc3	rasen	47
bbb1	bbb2	bbb3	putz	65
```

Es werden alle Datensätze angezeigt - dazu der jeweilige MAX-Wert.

Ich benötige aber folgendes Ergebnis:

```
ID          var1       var2       var3       artikel    preis 
1	aaa1	aaa2	aaa3	stecken	92
2	bbb1	bbb2	bbb3	putz	65
3	ccc1	ccc2	ccc3	fernseher	47
4	ddd1	ddd2	ddd3	fahrrad	87
```

Jede ID nur einmal und den dazugehörigen MAX-Wert.

Vielen Dank
Grüße
Heidi


----------

