sql >> データベース >  >> RDS >> Mysql

合計と小計の行の位置を保持するロールアップ後に並べ替える

    ヨハンの答え

    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`
    

    このトリックが機能する方法は、式country = 'total' countryの場合、1(true)と評価されます 列が'total'に等しい 、それ以外の場合は0(false)にします。番号の昇順では、1は0の後に続きます。したがって、その式で並べ替えると、countryが存在するすべての行が強制されます。 列が'total'に等しい 他の列の後に並べ替えます。

    同様に、式region = 'total'で並べ替えます valueの前 値が'total'の行を強制します 彼らのregionで 同じcountryを持つ他の行の後に並べ替える 、valueに関係なく 列。

    同じトリックが他の比較演算子 でも機能します。 それも。たとえば、負の値を強制的に正の値の後に並べ替える場合は、行を`value` < 0, `value`で並べ替えることができます。 。



    1. sys.dm_os_host_info動的管理ビューを使用してSQLServerでオペレーティングシステムのバージョン情報を返す

    2. サイトマップを生成するためのPHPを使用した複数のSQLテーブル

    3. AzureSQLマネージドインスタンスのパフォーマンスに関する考慮事項

    4. MySQLWorkbenchはMACOSX上のローカルMySQLサービスに接続できません