sql >> Databáze >  >> RDS >> Mysql

Řadit po souhrnu se zachováním pozice řádků součtů a mezisoučtů

Na základě původní verze Johanova odpověď :

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`

Tento trik funguje tak, že výraz country = 'total' vyhodnotí se jako 1 (pravda), pokud country sloupec se rovná 'total' a na 0 (nepravda) jinak. Ve vzestupném číselném pořadí následuje 1 za 0. Seřazení podle tohoto výrazu tedy vynutí všechny řádky, kde je country sloupec se rovná 'total' seřadit podle jiných sloupců.

Podobně řazení podle výrazů region = 'total' před value vynutí všechny řádky s hodnotou 'total' v jejich region seřadit podle jiných řádků se stejnou country , bez ohledu na jejich value sloupec.

Stejný trik funguje s dalšími operátory porovnání také. Pokud byste například chtěli vynutit řazení záporných hodnot po kladných hodnotách, můžete řádky seřadit podle `value` < 0, `value` .



  1. Nelze vytvořit databázovou tabulku s názvem 'user' v PostgreSQL

  2. MySQL:PŘIPOJTE dvě tabulky na LIKE

  3. CHYBA:Chyba při instalaci mysql2:CHYBA:Nepodařilo se sestavit nativní rozšíření drahokamů

  4. paměťově efektivní vestavěný iterátor/generátor SqlAlchemy?