Ergebnisse von mehreren Counts addieren

Ergebnisse von mehreren Counts addieren

am 19.08.2007 23:27:10 von Vincent van Scherpenseel

Hallo,

kann man das Ergebnis von mehreren Counts in einem Querry direkt
zusammen addieren lassen?

Ich habe eine Tabelle mit den Spalten
ID, Gast, Spiel, Prioritaet - alles integer, Gast und Spiel verweisen
auf andere Tabellen.
Jeder Gast kann mehrere Spiele auswählen, die Reihenfolge wird in der
Spalte Prioritaet gespeichert, 1 = das erste, 2 = 2., 3 = 3.
Je nach Prioritaet bekommt ein Spiel unterschiedliche Punkte (1. = 5, 2.
=3, 3. = 1).

Als Ergebnis möchte ich im Endeffekt eine Liste mit dem Namen des Spiels
und der Gesamtzahl der Punkte, absteigend sortiert und mit einer
Mindestpunktzahl.

Ich bin schon so weit, dass ich einen Querry habe der mit die Punkte
vergibt in den Ergebnisspalten V1, V2 und V3.
Wenn ich jetzt aber mit sum versuche V1,V2 und V3 zu addieren, sagt
mysql, dass dies keine Spalten sind.

MySQL Version: 5.0.38

Wie bekomme ich V1,V2 und V3 in dem gleichen Querry zusammen gezählt?
Beim Having kann ich daddieren, aber das hätte ich auch gerne als
Ergebnis und auch bei Order. Beim having kann ich aber auch kein "as"
benutzen.

Hier ist der Querry:

SELECT s.name, count( tg1.spiel ) *5 AS V1, count( tg2.spiel ) *3 AS V2,
count( tg3.spiel ) *1 AS V3
FROM gaeste_turnierspiele AS tg
LEFT JOIN spiele AS s ON tg.spiel = s.id
LEFT JOIN reservierungen r ON tg.gast = r.gast
LEFT JOIN gaeste_turnierspiele tg1 ON ( tg1.spiel = s.id
AND tg1.prioritaet = "1"
AND tg1.gast = r.gast )
LEFT JOIN gaeste_turnierspiele tg2 ON ( tg2.spiel = s.id
AND tg2.prioritaet = "2"
AND tg2.gast = r.gast )
LEFT JOIN gaeste_turnierspiele tg3 ON ( tg3.spiel = s.id
AND tg3.prioritaet = "3"
AND tg3.gast = r.gast )
WHERE r.veranstaltung =9
GROUP BY s.name
HAVING V1 + V2 + V3 >5
ORDER BY s.name


Marcus

Re: Ergebnisse von mehreren Counts addieren

am 20.08.2007 09:56:44 von Claus Reibenstein

Marcus Lammerich schrieb:

> Wenn ich jetzt aber mit sum versuche V1,V2 und V3 zu addieren, sagt
> mysql, dass dies keine Spalten sind.

Dann sind es wohl auch keine.

> Hier ist der Querry:

Das ist sicher nicht der Query, der den Fehler verursacht hat.
Jedenfalls sehe ich nirgends ein SUM().

Du musst uns schon den fehlerhaften Query zeigen, damit wir Dir sagen
können, was Du falsch gemacht hast.

Gruß. Claus

Re: Ergebnisse von mehreren Counts addieren

am 20.08.2007 10:39:37 von Vincent van Scherpenseel

Claus Reibenstein schrieb:
> Marcus Lammerich schrieb:
>
>> Wenn ich jetzt aber mit sum versuche V1,V2 und V3 zu addieren, sagt
>> mysql, dass dies keine Spalten sind.
>
> Dann sind es wohl auch keine.

V1 - V3 sind ja die Ergebnisse von dem Count, dass sieht man auch in dem
querry. Als Spalte in einer Tabelle existieren die nicht.

>> Hier ist der Querry:
>
> Das ist sicher nicht der Query, der den Fehler verursacht hat.
> Jedenfalls sehe ich nirgends ein SUM().
>
> Du musst uns schon den fehlerhaften Query zeigen, damit wir Dir sagen
> können, was Du falsch gemacht hast.

In dem Select hatte ich versucht mit sum(V1+V2+V3) as Gesamt die
Ergebnisse zu addieren. Auch ohne sum, also V1+V2+V3 as Gesamt hat nicht
funktioniert.

Hier der ergänzte Querry:

SELECT s.name, count( tg1.spiel ) *5 AS V1, count( tg2.spiel ) *3 AS V2,
count( tg3.spiel ) *1 AS V3,
sum(V1+V2+V3) as Gesamt
FROM gaeste_turnierspiele AS tg
LEFT JOIN spiele AS s ON tg.spiel = s.id
LEFT JOIN reservierungen r ON tg.gast = r.gast
LEFT JOIN gaeste_turnierspiele tg1 ON ( tg1.spiel = s.id
AND tg1.prioritaet = "1"
AND tg1.gast = r.gast )
LEFT JOIN gaeste_turnierspiele tg2 ON ( tg2.spiel = s.id
AND tg2.prioritaet = "2"
AND tg2.gast = r.gast )
LEFT JOIN gaeste_turnierspiele tg3 ON ( tg3.spiel = s.id
AND tg3.prioritaet = "3"
AND tg3.gast = r.gast )
WHERE r.veranstaltung =9
GROUP BY s.name
HAVING V1 + V2 + V3 >5
ORDER BY s.name

Re: Ergebnisse von mehreren Counts addieren

am 20.08.2007 11:28:49 von Christian Kirsch

Am 20.08.2007 10:39 schrieb Marcus Lammerich:
> dass sieht man auch in dem
> querry. Als Spalte in einer Tabelle existieren die nicht.

Das Ding heißt "QUERY" - oder eben "Abfrage". In jedem Fall nur ein "r".



--
Christian

Re: Ergebnisse von mehreren Counts addieren

am 20.08.2007 12:36:39 von Claus Reibenstein

Tipp: Quotings beginnen mit '> ' und nicht mit ' > '. Dann erkennt sie
auch mein Browser und färbt sie mir entsprechend ein. Das erleichtert
das Lesen.

Marcus Lammerich schrieb:

> Claus Reibenstein schrieb:
>
>> Marcus Lammerich schrieb:
>>
>>> Wenn ich jetzt aber mit sum versuche V1,V2 und V3 zu addieren, sagt
>>> mysql, dass dies keine Spalten sind.
>>
>> Dann sind es wohl auch keine.
>
> V1 - V3 sind ja die Ergebnisse von dem Count

Eben. SUM verlangt aber Spaltennamen, keine Abfrageergebnisse

> SELECT s.name, count( tg1.spiel ) *5 AS V1, count( tg2.spiel ) *3 AS V2,
> count( tg3.spiel ) *1 AS V3,

Das '*1' kannst Du Dir sparen (fällt mir gerade auf).

> sum(V1+V2+V3) as Gesamt

Versuche statt sum(V1+V2+V3) mal dieses:

COUNT(tg1.spiel) * 5 + COUNT(tg2.spiel) * 3 + COUNT(tg3.spiel)

Dann sollte es klappen.

Gruß. Claus

Re: Ergebnisse von mehreren Counts addieren

am 20.08.2007 13:10:52 von Vincent van Scherpenseel

Claus Reibenstein schrieb:

> Marcus Lammerich schrieb:

>> SELECT s.name, count( tg1.spiel ) *5 AS V1, count( tg2.spiel ) *3 AS V2,
>> count( tg3.spiel ) *1 AS V3,
>
> Das '*1' kannst Du Dir sparen (fällt mir gerade auf).

Danke für den Hinweis. Da sich möglicher Weise die Gewichtung noch
irgend wann ändern wird, ist es so einfacher. Die Werte werden im Query
durch Variablen eingesetzt.

>> sum(V1+V2+V3) as Gesamt
>
> Versuche statt sum(V1+V2+V3) mal dieses:
>
> COUNT(tg1.spiel) * 5 + COUNT(tg2.spiel) * 3 + COUNT(tg3.spiel)
>
> Dann sollte es klappen.

*patsch* Die Lösung kann manchmal so einfach sein. Funktioniert
wunderbar. Danke für das Entfernen des Brettes vom Kopf.

Marcus