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...