gpt4 book ai didi

mysql - 将数据拆分为范围并显示计数

转载 作者:行者123 更新时间:2023-12-01 00:51:28 25 4
gpt4 key购买 nike

我不是 MySql 专家。我正在尝试根据 account_no 将表中的数据拆分为多个范围。这是我的 table 。

mysql> select * from manager;
+----+-------+------------+
| id | name | account_no |
+----+-------+------------+
| 1 | John | 5 |
| 2 | Peter | 15 |
| 3 | Tony | 18 |
| 4 | Mac | 35 |
| 5 | Max | 55 |
| 6 | Smith | 58 |
+----+-------+------------+

如您所见,account_no 是一个正数。我想根据 account_no 将这些记录分成 10 批,并显示该范围内的计数。

举个例子
010之间只有1记录
1120之间有2条记录
2130 之间没有 记录*(因此应该省略。)*
等等……

其实我很希望得到这样的输出。

+-------------+-----------+-------+
| range_start | range_end | count |
+-------------+-----------+-------+
| 1 | 10 | 1 | -> because there is 1 record between 1 and 10
| 11 | 20 | 2 | -> because there are 2 records between 11 and 20
| 31 | 40 | 1 | -> because there is 1 record between 31 and 40
| 51 | 60 | 2 | -> because there are 2 records between 51 and 60
+-------------+-----------+-------+

我尝试了几种组合,但所有组合都只给我结果中的一行。
谁能帮帮我?

最佳答案

我的建议是创建一个包含范围的表 - startRangeendRange:

CREATE TABLE range_values   (`startRange` int, `endRange` int) ;

INSERT INTO range_values(`startRange`, `endRange`)
VALUES (1, 10), (11, 20), (21, 30), (31, 40), (51, 60);

创建表后,您可以轻松加入表以获取计数。

select r.startRange,
r.endRange,
count(m.account_no) totalCount
from manager m
inner join range_values r
on m.account_no >=startrange
and m.account_no <= endrange
group by r.startRange, r.endRange

参见 SQL Fiddle with Demo .

表格的好处是您无需对范围值进行编码,并且无需更改代码即可轻松更新表格中的范围。

此查询返回:

| STARTRANGE | ENDRANGE | TOTALCOUNT |
--------------------------------------
| 1 | 10 | 1 |
| 11 | 20 | 2 |
| 31 | 40 | 1 |
| 51 | 60 | 2 |

如果你不想创建一个新表,那么你可以使用类似下面的东西:

select startrange,
endrange,
count(m.account_no) TotalCount
from manager m
inner join
(
select 1 startRange, 10 endrange union all
select 11 startRange, 20 endrange union all
select 21 startRange, 30 endrange union all
select 31 startRange, 40 endrange union all
select 41 startRange, 50 endrange union all
select 51 startRange, 60 endrange
) r
on m.account_no >=startrange
and m.account_no <= endrange
group by r.startRange, r.endRange

参见 SQL Fiddle with demo

关于mysql - 将数据拆分为范围并显示计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15275800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com