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

Seskupit podle počtu (nejlepších 5) a počtu (všechny ostatní)

V MySQL je pravděpodobně nejjednodušší způsob, jak to vyjádřit, pomocí dočasné tabulky:

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 sloupec v dočasné tabulce přidá do každého řádku číslo řádku. V jakékoli jiné skutečné databázi byste použili row_number() funkci, ale MySQL ji nepodporuje.



  1. Jak zajistím, aby dotaz nevracel nic, když neexistují žádné podmínky?

  2. Jak nastavit připojovací řetězec s Entity Framework

  3. 1 pod má odpojené okamžité nároky PersistentVolumeClaims na Minikube

  4. MySQL Select JOIN 3 Tables