MySQL Forums
Forum List  »  German

Re: ORDER BY nach Punkten....
Posted by: Thomas Wiedmann
Date: September 09, 2012 12:31PM

Hallo Christian,

zu SQL Problemen bitte immer die CREATE TABLE aller beteiligten Tabellen und die passenden INSERT Testdaten mitliefern.

Denke ich mir also mal folgendes...

CREATE TABLE users (
 user_id INT NOT NULL,
 username VARCHAR(30) NOT NULL,
 PRIMARY KEY (user_id)
);

CREATE TABLE tipps (
 tipp_id INT NOT NULL,
 user_id INT NOT NULL,
 points INT NOT NULL,
 gameid INT NOT NULL,
 PRIMARY KEY (tipp_id)
);

INSERT INTO users VALUES
( 1, 'User-1'),
( 2, 'User-2');

INSERT INTO tipps VALUES
( 1, 1 , 2 , 1 ),
( 2, 1 , 3 , 2 ),
( 3, 1 , 0 , 3 ),

( 4, 2 , 2 , 1 ),
( 5, 2 , 2 , 2 ),
( 6, 2 , 1 , 3 );

/* Sortieren nach zwei Summen Kriterien und nach Name */
SELECT u.user_id, 
       MAX(u.username) AS username,
       SUM( CASE 
                WHEN t.points = 3 THEN 1
                ELSE 0
               END 
          ) AS sum_dreier,
       SUM(t.points) AS sum_points
  FROM users u
  JOIN tipps t
    ON t.user_id = u.user_id
GROUP BY u.user_id
ORDER BY sum_dreier DESC , sum_points DESC, u.username;
+---------+----------+------------+------------+
| user_id | username | sum_dreier | sum_points |
+---------+----------+------------+------------+
|       1 | User-1   |          1 |          5 |
|       2 | User-2   |          0 |          5 |
+---------+----------+------------+------------+
2 rows in set (0.00 sec)

mysql>

In der SELECT Liste habe ich jetzt zwei Rechenfelder: SUM_DREIER für die Anzahl der Dreier und SUM_POINTS für die Summe der Punkte allgemein. Der MAX(u.username) ist auch korrekt für den GROUP BY. Ohne MAX() müßte es eigentlich einen SQL-Fehler geben, nur dass MySQL dies nicht anmeckert (siehe SERVER_MODE ONLY_FULL_GROUP_BY).

Die ORDER BY Klausel besteht jetzt aus drei Spalten. Das Hauptsortkriterium ist SUM_DREIER, dann SUM_POINT und nun der USERNAME.

Grüße
Thomas

Options: ReplyQuote


Subject
Views
Written By
Posted
1663
September 09, 2012 10:20AM
Re: ORDER BY nach Punkten....
961
September 09, 2012 12:31PM
1060
September 09, 2012 11:21PM
765
September 10, 2012 08:38AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.