sql >> Database >  >> RDS >> Mysql

Groeperen op Telling van (Top 5) &Telling van (Alle andere)

In MySQL is dit waarschijnlijk de gemakkelijkste manier om dit uit te drukken door een tijdelijke tabel te gebruiken:

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

De id kolom in de tijdelijke tabel voegt een rijnummer toe aan elke rij. In elke andere echte database zou je de row_number() functie, maar MySQL ondersteunt dat niet.



  1. SQL selecteert rijen op meest recente datum met twee unieke kolommen

  2. Session_start Gebruikersprofieldetail

  3. Selecteer alleen unieke waarden uit een kolom in codeigniter

  4. NULLIF() Functie in Oracle