Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sortieren nach Rollup unter Beibehaltung der Zeilenposition von Summen und Zwischensummen

Basierend auf der Originalversion von Johans Antwort :

SELECT *
FROM (
  SELECT 
    COALESCE(country, 'total') AS country,
    COALESCE(region, 'total' ) AS region,
    SUM(`value`) as `value`, 
  FROM `table` 
  GROUP BY country, region WITH ROLLUP
) t
ORDER BY country = 'total', country, region = 'total', `value`

Dieser Trick funktioniert so, dass der Ausdruck country = 'total' ergibt 1 (wahr), wenn country Spalte ist gleich 'total' , andernfalls auf 0 (falsch). In aufsteigender numerischer Reihenfolge kommt 1 nach 0. Daher erzwingt die Sortierung nach diesem Ausdruck alle Zeilen, in denen country steht Spalte ist gleich 'total' um nach anderen Spalten zu sortieren.

Ebenso die Sortierung nach den Ausdrücken region = 'total' vor value erzwingt alle Zeilen mit dem Wert 'total' in ihrer region um nach allen anderen Zeilen mit demselben country zu sortieren , unabhängig von ihrem value Spalte.

Der gleiche Trick funktioniert mit anderen Vergleichsoperatoren zu. Wenn Sie zum Beispiel negative Werte erzwingen möchten, um nach positiven Werten zu sortieren, könnten Sie die Zeilen nach `value` < 0, `value` sortieren .