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

MySQL a CASE WHEN s rozsahem hodnot

zkuste toto:

SELECT count(*) as ct, 
CASE  
    WHEN COUNT(*) < 25 THEN '1-25' 
    WHEN COUNT(*) >= 25 < 50 THEN '25-50' 
    WHEN COUNT(*) >= 50 < 100 THEN '50-100' 
    WHEN COUNT(*) >= 100 < 250 THEN '100-250' 
    WHEN COUNT(*) >= 250 < 500 THEN '250-500' 
    WHEN COUNT(*) >= 500 < 1000 THEN '500-1000' 
    ELSE '1000+' 
END AS grp 
FROM records r, accounts a 
WHERE r.account_id=a.id 
GROUP BY r.account_id, a.id, 
    CASE  
    WHEN COUNT(*) < 25 THEN '1-25' 
    WHEN COUNT(*) >= 25 < 50 THEN '25-50' 
    WHEN COUNT(*) >= 50 < 100 THEN '50-100' 
    WHEN COUNT(*) >= 100 < 250 THEN '100-250' 
    WHEN COUNT(*) >= 250 < 500 THEN '250-500' 
    WHEN COUNT(*) >= 500 < 1000 THEN '500-1000' 
    ELSE '1000+' END
ORDER BY count(*)

Musíte "definovat" "segmenty", do kterých chcete agregovat původní datové řádky... K tomu slouží klauzule Seskupit podle... Definuje kritéria, podle kterých bude každý řádek v základních tabulkách analyzován. určit, do kterého "segmentu" budou data agregována... Výraz nebo výrazy definované ve skupině podle klauzule jsou "definicemi" pro tyto segmenty.

Jak dotaz zpracovává původní datové řádky, je do tohoto segmentu agregován každý řádek, pro který jsou hodnoty tohoto výrazu (výrazů) stejné jako v existujícím segmentu... Jakýkoli nový řádek s hodnotou, kterou nepředstavuje existující bucket způsobí vytvoření nového bucketu...



  1. Jak zkontrolovat, zda MySQL vrací hodnotu null/empty?

  2. Jak dělat modelování dědičnosti v relačních databázích?

  3. Jak spustit Google Cloud SQL, pouze když to potřebuji?

  4. Chyba MySQL 1118 (velikost řádku je příliš velká) při obnově databáze Django-mailer