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

(トップ5)の数と(その他すべて)の数でグループ化

    MySQLでは、これを表現する最も簡単な方法は、一時テーブルを使用することです。

    create temporary table temp as (
        id int not null auto_increment,
        CaseLabel varchar(255),
        CasesResolved int
    );
    
    insert into temp(CaseLabel, CasesResolved)
        SELECT deskcases.Labels, COUNT(deskcases.Labels)AS CaseCount
        FROM deskcases
        WHERE deskcases.Labels NOT LIKE ''
              AND deskcases.Labels NOT LIKE '%SPAM%'
              AND deskcases.Labels NOT LIKE '%Online Orders%'
              AND deskcases.Labels NOT LIKE '%Internal SPAM%'
              AND deskcases.`Case Status` LIKE 'Resolved'
              AND deskcases.`Resolved At` > CURDATE()- INTERVAL 7 DAY
        GROUP BY deskcases.Labels
        ORDER BY CaseCount DESC;
    
    select (case when id <= 5 then caselabel else 'Other' end),
           SUM(casesResolved) as CasesResolved
    from temp
    group by (case when id <= 5 then caselabel else 'Other' end)
    order by MAX(id) desc
    

    id 一時テーブルの列は、各行に行番号を追加します。他の実際のデータベースでは、row_number()を使用します 機能しますが、MySQLはそれをサポートしていません。



    1. debianのpostgresから古いデータを削除するcronジョブ

    2. エンティティフレームワーク6にMySQL接続を使用できません

    3. MySQLdumpとMySQLシェルユーティリティを使用したパフォーマンステスト

    4. 別のテーブルの行を更新するトリガー