例如,有一个帐户表具有:

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/

10-11 06:30