Verstehe Group by nicht

Verstehe Group by nicht

am 04.10.2007 09:22:35 von Stephan Dreisbach

Hallo,

folgende Tabellen sind gegeben:

Tabelle1:
Nr
LName
LVorname
...

Tabelle2:
...
Punkte
Lehrer

Tabelle3:
...
Lehrernr

Ich suche nun alle Personen aus der Tabelle1, die nicht in Tabelle3
enthalten sind. Dazu will ich die Summe aller Punkte haben von den
Personen in der Tabelle2, bei denen Tabelle2.Lehrer mit Tabelle1.Nr
übereinstimmt.

So habe ich es probiert:

SELECT *, sum(SS.Punkte) as PKT FROM Tabelle1 L
left Join Tabelle2 SS on L.Nr=SS.Lehrer
WHERE and L.Nr not in (select Lehrernr from Tabelle3)
order by L.seit, L.LName, L.LVorname";

Aber ich bekomme die Fehlermeldung, etwas gruppieren zu müssen - und
das ist mir nicht klar.

--
Stephan

Re: Verstehe Group by nicht

am 04.10.2007 09:47:24 von Gregor Kofler

Stephan Dreisbach meinte:
> Hallo,
>
> folgende Tabellen sind gegeben:
>
> Tabelle1:
> Nr
> LName
> LVorname
> ..
>
> Tabelle2:
> ..
> Punkte
> Lehrer
>
> Tabelle3:
> ..
> Lehrernr
>
> Ich suche nun alle Personen aus der Tabelle1, die nicht in Tabelle3
> enthalten sind. Dazu will ich die Summe aller Punkte haben von den
> Personen in der Tabelle2, bei denen Tabelle2.Lehrer mit Tabelle1.Nr
> übereinstimmt.
>
> So habe ich es probiert:
>
> SELECT *, sum(SS.Punkte) as PKT FROM Tabelle1 L

Das * verunmöglicht schon mal eine Gruppierung.

> left Join Tabelle2 SS on L.Nr=SS.Lehrer
> WHERE and L.Nr not in (select Lehrernr from Tabelle3)

"Where and"?

> order by L.seit, L.LName, L.LVorname";

> Aber ich bekomme die Fehlermeldung, etwas gruppieren zu müssen - und
> das ist mir nicht klar.

Sowieso. Um eine Punktesumme zu bilden müssen andere Spalten
zusammengezogen werden. Du nimmst also neben der Punktesumme nur die
Namen oder IDs der Lehrer und gruppierst über diese ID oder Namen-Spalten.

Auch wenn man etwas mitdenken muss:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.ht ml
zu lesen schadet nicht (es sind genügend Beispiele dabei).

Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Verstehe Group by nicht

am 04.10.2007 10:02:35 von Claus Reibenstein

Stephan Dreisbach schrieb:

> Ich suche nun alle Personen aus der Tabelle1, die nicht in Tabelle3
> enthalten sind. Dazu will ich die Summe aller Punkte haben von den
> Personen in der Tabelle2, bei denen Tabelle2.Lehrer mit Tabelle1.Nr
> übereinstimmt.

Was meinst Du mit "Personen"? Lehrer? Deine Formulierung ist etwas unklar.

> SELECT *, sum(SS.Punkte) as PKT FROM Tabelle1 L
> left Join Tabelle2 SS on L.Nr=SS.Lehrer
> WHERE and L.Nr not in (select Lehrernr from Tabelle3)
> order by L.seit, L.LName, L.LVorname";

Diese Anweisung enthält einen Syntaxfehler. Diese vermeidest Du, indem
Du solche Anweisungen nicht neu eintippst, sondern das Original per
Copy&Paste in die Nachricht überträgst.

> Aber ich bekomme die Fehlermeldung, etwas gruppieren zu müssen - und
> das ist mir nicht klar.

SUM() ist eine Gruppierungsfunktion, setzt also eine Gruppe von
Datensätzen voraus, über die er summieren soll. Diese Gruppen definierst
Du über GROUP BY. Laut Deiner Beschreibung möchtest Du die Summe pro
Person bilden. Also musst Du auch nach Personen gruppieren.

Gruß. Claus