sql >> Database teknologi >  >> RDS >> Mysql

Sorter efter oprulning, bevarer totaler og subtotaler rækkers position

Baseret på den originale version af Johans svar :

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`

Måden dette trick fungerer på er, at udtrykket country = 'total' evalueres til 1 (sand), hvis country kolonne er lig med 'total' , og til 0 (falsk) ellers. I stigende numerisk rækkefølge kommer 1 efter 0. Sortering efter det udtryk tvinger således alle rækker, hvor country kolonne er lig med 'total' for at sortere efter eventuelle andre kolonner.

På samme måde sorteres efter udtrykkene region = 'total' før value tvinger alle rækker med værdien 'total' i deres region at sortere efter andre rækker med det samme country , uanset deres value kolonne.

Det samme trick fungerer med andre sammenligningsoperatorer også. Hvis du f.eks. vil tvinge negative værdier til at sortere efter positive værdier, kan du sortere rækkerne efter `value` < 0, `value` .



  1. Hvordan kan jeg kombinere AND'er og OR'er i min SQL-sætning

  2. Hvordan finder man en post efter id og vælger nogle få kolonner, rubin på skinner?

  3. mysql - hvor mange kolonner er for mange?

  4. Dvale mysql čć