TOP 5: SELECT mit Subtraktion

MrMahi

Benutzer
Beiträge
22
Hallo,

ich habe ein Problem, versuche das mal zu erläutern.

Ich habe für 2 Spieler eine kleine Datenbank (Thomas & Jens, zocken FIFA).

In einem SELECT ermittel ich die 5 TOPTEAMS für z.B. Thomas:

Code:
SELECT team_thomas, COUNT(team_thomas) AS teamthomas, img_url
FROM fifa, teams
WHERE score_thomas > score_jens
AND fifa.team_thomas = teams.teamname
GROUP BY team_thomas
ORDER BY teamthomas DESC
LIMIT 5

Das klappt auch alles einwandfrei.

Jetzt möchte ich aber die TOP5 so berechnen das wenn die gleiche Mannschaft öfters verloren als gewonnen hat, Sie nicht mehr in der Tabelle erscheint.
Momentan ist das so das die Top-Mannschaft auf die Flop-Mannschaft sein kann.
Das macht ja keinen Sinn.

Ich komme aber nicht weiter.

Wollte es so machen

...WHERE (score_thomas > score_jens) - (score_jens > score_thomas)

das geht aber nicht.

Kann mir bitte jemand sagen wie es geht?

Beste Grüße,
Jens
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
285
Hallo Jens,

versuchs mal mit folgender WHERE-Klausel:

Code:
...
WHERE (score_thomas - score_jens) > 0

Hier wird dann nur der Score-Gleichstand nicht beachtet, was aber mit einem >= auch noch ganz leicht zu ändern wäre.

Viele Grüße,
Tommi
 

MrMahi

Benutzer
Beiträge
22
Hallo Tommi,

vielen Dank schon mal. Sah für mich super aus der Ansatz.
Zu meiner Überraschung hat sich dadurch gar nichts verändert? (Hätt ich nicht gedacht).
Andere Ideen?

Beste Grüße,
Jens
 

ukulele

Datenbank-Guru
Beiträge
4.582
Du musst die Abfrage schon etwas umbauen um Siege miteinander zu verrechnen, da fallen mir spontan mehrere Möglichkeiten ein. Zwei Tabellen per UNION ALL (hoffentlich bei MySQL möglich) zusammen als Subselect scheint mir schnell und komfortabel:
Code:
SELECT    team_thomas,
        img_url,
        sum(win_thomas) AS win_thomas,
        sum(win_jens) AS win_jens
FROM    (    SELECT    team_thomas,
                    img_url,
                    1 AS win_thomas,
                    0 AS win_jens
            FROM    fifa,
                    teams
            WHERE    score_thomas > score_jens
            AND        fifa.team_thomas = teams.teamname
            UNION ALL
            SELECT    team_thomas,
                    img_url,
                    0 AS win_thomas,
                    1 AS win_jens
            FROM    fifa,
                    teams
            WHERE    score_thomas < score_jens
            AND        fifa.team_thomas = teams.teamname ) hilfstabelle
WHERE    sum(win_thomas) > sum(win_jens)
GROUP BY team_thomas
ORDER BY teamthomas DESC
LIMIT 5
 

MrMahi

Benutzer
Beiträge
22
Danke Dir. Das ist natürlich nen Brett ;)
Momentan motzt die Ausgabe: " Every derived table must have its own alias".
Ich stelle das noch mal nen bißchen um.
Hätte gedacht so was kann man mit kürzerer Synatx abhandeln.

1000 Dank.
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
Du kannst auch per CASE Schleife die Siege der einzelnen Spieler als Spalte ausgeben, du musst aber so wie ich das im Moment sehe in jedem Fall einen Subselect nutzen denn du kannst nicht direkt Gruppieren. Das ist aber alles kein Hexenwerk und relativ harmlos.
 
Oben