sql >> Database >  >> RDS >> Mysql

MySQL en CASE WHEN met een reeks waarden

probeer dit:

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(*)

U moet de "buckets" "definiëren" waarin u de oorspronkelijke gegevensrijen wilt samenvoegen... Dit is waar de Group By-clausule voor is... Het definieert de criteria waarop elke rij in de basistabellen wordt geanalyseerd om bepaal in welke "bucket" de gegevens worden geaggregeerd... De expressie of expressies die zijn gedefinieerd in de group by-clausule zijn de "definities" voor die buckets.

Terwijl de query de oorspronkelijke gegevensrijen verwerkt, wordt elke rij waarvoor de waarde(n) van deze uitdrukking(en) hetzelfde zijn als een bestaande bucket geaggregeerd in die bucket... Elke nieuwe rij met een waarde die niet wordt vertegenwoordigd door een bestaande bucket zorgt ervoor dat er een nieuwe bucket wordt aangemaakt...



  1. Vervang null-waarden in sql met behulp van de select-instructie in mysql?

  2. Slaapstand-annotatie voor PostgreSQL-serieel type

  3. Mysql:Bestellen op like?

  4. Een paar kleine problemen met Hekaton-samples