sql >> Database >  >> RDS >> Mysql

Sorteren na samenvoeging met behoud van totalen en subtotalen rijpositie

Gebaseerd op de originele versie van Johans antwoord :

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`

De manier waarop deze truc werkt, is dat de uitdrukking country = 'total' evalueert tot 1 (true) als het country kolom is gelijk aan 'total' , en anders naar 0 (false). In oplopende numerieke volgorde komt 1 na 0. Sorteren op die uitdrukking dwingt dus alle rijen af ​​waar het country kolom is gelijk aan 'total' om te sorteren na andere kolommen.

Evenzo sorteren op de uitdrukkingen region = 'total' voor value forceert alle rijen met de waarde 'total' in hun region om te sorteren op andere rijen met hetzelfde country , ongeacht hun value kolom.

Dezelfde truc werkt met andere vergelijkingsoperators te. Als u bijvoorbeeld wilt dat negatieve waarden worden gesorteerd op positieve waarden, kunt u de rijen sorteren op `value` < 0, `value` .



  1. Maximale grootte van een varchar(max) variabele

  2. Kan MySQL strings samenvoegen met ||

  3. Prestaties van MySQL tellen rijen

  4. Aan te bevelen Hot Backup-systeem voor MySQL?