# [SQL] Rechnen in einer Abfrage



## error_on (20. Oktober 2011)

Ich habe eine SQL-Tabelle in der Schachspieler ihre Herausforderungen eintragen sollen.

Das Ganze wollte ich so aufbauen:
Tabelle user
Tabelle challenge

die Tabelle user ist hier eigentlich recht uninteressant, die Tabelle challenge macht mir allerdings bei einer Abfrage Probleme.

Die Schachspieler tragen nach folgendem Muster ihre Ergebnisse ein:

```
ID (PrimKey)
userID (Das ist der Spieler der die Challenge eingetragen hat und auch der Gewinner ist)
opponentID (Das ist der Gegner und der Verlierer der Herausforderung)
```

Es soll nun ausgewertet und gleichzeitig sortiert werden, das Muster hierbei ist folgendes


```
#    Spieler     Punkte
1    Anton       120
2    Hans        100
3    Theo         -10
```
D.h. Jeder Spieler der ein Spiel eingetragen hat, der bekommt 10 Punkte, wenn jemand ein Spiel verloren hat, dann erhält er -5 Punkte.

Was mir die größten Probleme macht ist die Ermittlung der Punkte, die Rangliste wäre dann eher kein Problem, denn das könnte man mit der Ausgabe erledigen.


----------



## Yaslaw (20. Oktober 2011)

Als erstes sollten wir mal definieren mit was für einer Datenbank du arbeiten willst. MySQL, Oracle, MS SQL?
Mit MySQL könntest du das etwa so versuchen.
Die User mit einer Union untereinander setzen und dann darüber gruppieren und summieren

```
SELECT
	userID,
	SUM(pkt) AS punkte
FROM
	(
		SELECT
			userID,
			10 AS pkt
		FROM
			challenge
		UNION ALL
		SELECT
			opponentID,
			-5 AS pkte
		FROM
			challenge
	) AS dat
GROUP BY
	userID
```


----------



## error_on (20. Oktober 2011)

Richtig, genau das hab ich gesucht, danke! Mysql war richtig.

Danke für die Hilfe!


----------

