Ответ 1
попробуйте следующее:
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, являются "определениями" для этих ковшей.
Когда запрос обрабатывает исходные строки данных, любая строка, для которой значения (-ы) этого выражения (ов) совпадают с существующим ведром, агрегируется в это ведро... Любая новая строка со значением, не представленным с помощью существующего ведра вызывает создание нового ведра...