prova detta:
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(*)
Du måste "definiera" de "buckets" som du vill aggregera de ursprungliga dataraderna till... Det här är vad Group By-satsen är till för... Den definierar kriterierna för att varje rad i bastabellerna ska analyseras för att bestäm vilken "bucket" dess data kommer att aggregeras till... Uttrycket eller uttrycken som definieras i group by-satsen är "definitionerna" för dessa segment.
När frågan bearbetar de ursprungliga dataraderna, aggregeras alla rader för vilka värdet/värdena för detta/detta uttryck är desamma som en befintlig hink till den hinken... Vilken ny rad som helst med ett värde som inte representeras av en befintlig hink gör att en ny hink skapas...