2012-07-11 8 views
1

Tableau structure:requête MySQL avec le groupe par ordre et

country 
season 
points 

requête actuelle:

SELECT SUM(points) AS total, country 
FROM table 
WHERE season >= X 
GROUP BY country 
ORDER BY total desc 

Cela me donne une belle liste ordonnée par un total de points recueillis par un pays donné. MAIS, si un pays est à égalité avec un autre pays, je veux trier par leurs points dans la dernière saison donnée, est-ce possible dans la même requête? Et si oui, comment? (Rappelez-vous son groupé au moment)

exemple de lignes danemark (pays), 1 (saison), 10 (points) danemark (pays), 2 (saison), 5 (points) sweden (pays) , 1 (saison), 5 (points) sweden (pays), 2 (saison), 10 (points)

+0

Qu'est-ce que cela veut dire "si un pays est lié à un autre pays"? Et comment le sais-tu? – fancyPants

+2

Je suppose qu'il veut dire quand ils ont le même total de points – PoeHaH

+0

Je voudrais ajouter une autre clause à l'ordre par. ORDER BY total, saison DESC – PoeHaH

Répondre

1

Peut-être que ça va faire votre truc:

SELECT SUM(points) AS total, country 
FROM table 
WHERE season >= X 
GROUP BY country 
ORDER BY total DESC, (SELECT t2.points FROM table t2 WHERE table.country=t2.country ORDER BY t2.season LIMIT 1) DESC 
+0

est un petit peu mieux la performance sage que la requête de ypercube? –

1
SELECT grp.total, grp.country 
FROM 
     (SELECT SUM(points) AS total, country, MAX(season) AS max_season 
      FROM table 
      WHERE season >= X 
      GROUP BY country 
     ) AS grp 
    LEFT JOIN 
     table AS t 
      ON t.country = grp.country 
      AND t.season = LATEST_SEASON 
ORDER BY 
    grp.total DESC 
    , t.points DESC ; 
+0

thx - cela m'a aidé :) Maintenant juste je dois décider si c'est trop lourd par rapport à mettre dans l'endroit réel au lieu de l'obtenir à chaque fois comme ça :) –