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