例如,有一个帐户表具有:
account_id | ......
000 | ......
001 | ......
004 | ......
010 | ......
.....
198 | ......
我想获取帐户ID的分布,而不是一次又一次地运行以下查询,有没有更聪明的方法来获取000-010、010-020,...,190-200的ID计数?谢谢
SELECT count(account_id)
FROM accounts
WHERE account_id >= '000' AND account_id <= '010';
最佳答案
您可以将account_id
除以10以创建范围,然后按除结果分组以得到所需的结果:
SELECT CONCAT(LPAD(FLOOR(account_id/10)*10,3, '0'), '-', LPAD(FLOOR(account_id/10)*10+9, 3, '0')) AS `range`,
COUNT(*) AS number
FROM accounts
GROUP BY `range`
输出(对于我的演示中的一些示例数据):
range number
000-009 3
010-019 2
020-029 1
030-039 1
040-049 1
050-059 2
Demo on dbfiddle
关于mysql - 如何递归运行sql查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53490031/