hãy thử cái này:
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(*)
Bạn phải "xác định" "nhóm" mà bạn muốn tổng hợp các hàng dữ liệu ban đầu thành ... Đây là mệnh đề Group By dùng cho ... Nó xác định tiêu chí mà mỗi hàng trong bảng cơ sở sẽ được phân tích thành xác định dữ liệu của nó sẽ được tổng hợp vào "nhóm" nào ... Biểu thức hoặc các biểu thức được xác định trong nhóm theo mệnh đề là "định nghĩa" cho các nhóm đó.
Khi truy vấn xử lý các hàng dữ liệu ban đầu, bất kỳ hàng nào có (các) giá trị của (các) biểu thức này giống với một nhóm hiện có sẽ được tổng hợp vào nhóm đó ... Bất kỳ hàng mới nào có giá trị không được đại diện bởi một nhóm hiện có bucket sẽ tạo ra một bucket mới ...