[MySQL] - Untypischer COUNT()-Befehl!

Abdullah2015

Grünschnabel
Hallo und einen wunderschönen Nachmittag,

ich versuche verzweifelt eine Lösung für mein "so unberechenbares" Problem zu finden, jedoch scheitere ich mit jedem Versuch.

Also, ich möchte die Anzahl der vorhandenen Datensätze mit dem jeweiligen Wert (1-8) des Attributs "typ" von dem jeweiligen vorhandenen Benutzer (Attribut "user") ausgegeben bekommen .
Diese dann noch mit einem bestimmten Faktor für den jeweiligen Typ multiplizieren.
Zur guter letzt soll es die gesammten Werte zusammen addieren und die jeweiligen User ausgeben, sodass ich nach den größten Punktzahl sortieren kann.

(Zweck der Sache: Highsore! Punkteliste)


Versuchte optische Darstellung meines Problems:

R_Punkte
Code:
[id], user, typ
1, 1, 2
2, 1, 2
3, 1, 3
4, 2, 1
5, 2, 3
6, 1, 8

Gewünschte Ausgabe:

1. Schritt (Nach "typen" zählen):

R_Punkte
Code:
[user], typ1, typ2, typ3, ..., typ7, typ8
[1], 0, 2, 1, ..., 0, 1
[2], 1, 0, 1, ..., 0, 0

2. Schritt (Je nach Typ mit dementsprechenen Faktor multiplizieren!)

R_Punkte
Code:
[user], typ1 * 2, typ2 * 3, typ3 * 5, ..., typ7 * 7, typ8 * 8
[1], 0, 4, 5, ..., 0, 8
[2], 2, 0, 5, ..., 0, 0

3. Schritt (Alle Werte zusammen addieren!)

R_Punkte
Code:
[user], punkte
[1], 17
[2], 7

Danke im Vorraus,
 
Dein Vorgehen ist kreuzfalsch. Darum kommst du nicht drauf.

Das Endresultat in einem Schritt
SQL:
SELECT
    ´user´,
    SUM(CASE typ
        WHEN 1 THEN 2
        WHEN 2 THEN 4
        ...
        WHEN 8 THEN 87967
    END) AS punkte
FROM
    my_table
GROUP BY
    ´user´

Der CASE ... END definiert für jeden Type den Faktor. ALso immer WHEN type THEN factor.
Diese jetzt pro User zusammenzählen und schon hat man das Punktetotal.
 
Einen herzlichen Dank!

Yaslaw, du beeindruckst mich jedesmal mehr mit deinen Kenntnissen.
Deswegen bin ich dir auch jedesmal umso mehr dankbar :D


Ohne dir nah tretten zu wollen, würd ich gerne nur grob wissen, woher du dir die Kenntnisse angeeignet hast.

Studium, Leidenschaftlich (Freizeit), Beruf!?

Wäre dankbar auf eine Rückmeldung, gerne auch per PN.
 
Zurück