【问题标题】:Select with grouping in range在范围内分组选择
【发布时间】:2011-09-29 13:02:25
【问题描述】:
From Table
A   B
_______________
1   A
3   B
6   C
7   C
8   X   
9   Y
15  Z
16  R
17  t   
23  T
43  e

如何带来这个结果:

Range A  Count B
_________________
1-10    6
11-20   3
21-30   1
31-40   1

这可以使用循环来完成:

Select Count (* ) from TableA where b between @a and @b

但我想不使用任何循环就可以做到吗?

【问题讨论】:

    标签: sql sqlite group-by


    【解决方案1】:

    试试这个:

    SELECT 
    Cast(((A / 10) * 10 + 1) as varchar(100)) + '-' + Cast(((A / 10) * 10 + 10) as varchar(100)) AS 'Range A',
    Count(*) as 'Count B'
     FROM TableA
    GROUP BY A / 10
    

    【讨论】:

    • -1,您正在使用 mod,您应该使用整数除法 round((a / 10)+/- 0.5)
    • @Johan 是的,很好发现。固定。
    • 结果不像预期的那样在 1-10,11-20 范围内,而是在 1-10,2-11 等范围内,下限和上限都增加了 1,所以还没有弄清楚如何去做。
    • @Thunder 使用 SQL Server 测试(不是 SQLite,但看不出为什么会有所不同)。为我工作 - 给出 1-10, 6 | 11-20, 3 | 21-30, 1 | 41-50, 1
    • @Tim Rogers:(“它会不同”)的一个原因是,如果两个操作数都是整数,SQLite 可能不会使用整数除法,就像 SQL Server 那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多