опитайте това:
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(*)
Трябва да "дефинирате" "кофите", в които искате да агрегирате оригиналните редове с данни... Това е за какво е клаузата Group By... Тя определя критериите, по които всеки ред в базовите таблици ще бъде анализиран за определете в коя "кофа" данните ще бъдат агрегирани... Изразът или изразите, дефинирани в клаузата group by, са "дефинициите" за тези кофи.
Тъй като заявката обработва оригиналните редове с данни, всеки ред, за който стойността(ите) на този израз(и) са същите като съществуваща кутия, се обобщава в тази кофа... Всеки нов ред със стойност, която не е представена от съществуващ bucket предизвиква създаване на нова кофа...