Предполагая, что id является ключевым столбцом, попробуйте это:
Select Case When money < 100 Then 'LT100'
When money < 200 Then 'From100To199'
When money < 300 Then 'From200To299'
When money < 1000 Then 'From300To999'
Else 'GE1000' End Bucket,
Count(*) Count
From Table
Group By Case When money < 100 Then 'LT100'
When money < 200 Then 'From100To199'
When money < 300 Then 'From200To299'
When money < 1000 Then 'From300To999'
Else 'GE1000' End
EDIT:
Если длина или размер сегментов является константой (или может быть представлена как выражение SQL), то вы можете сделать любое произвольное количество сегментов, определив сегменты как выходные данные этого выражения, как, например, для определенного каждые 100 долларов США:
Select Str(Floor(Cast(money / 100)), 8, 0) Bucket,
Count(*) Count
From Table
Group By Str(Floor(Cast(money / 100)), 8, 0)
или, чтобы иметь 100 долларовых ведер до 1000 долларов, а затем 1000 долларов, начиная с:
Select Case When Money < 1000
Then Str(Floor(Cast(money / 100)), 8, 0)
Else Str(Floor(Cast(money / 1000)), 8, 0) End Bucket,
Count(*) Count
From Table
Group By Case When Money < 1000
Then Str(Floor(Cast(money / 100)), 8, 0)
Else Str(Floor(Cast(money / 1000)), 8, 0) End
чтобы получить накопленные значения, я бы использовал вывод указанных выше SQL-запросов в качестве подзапроса в другом SQL:
Используя первый пример:
Select LT100,
LT100 + From100To199 LT200,
LT100 + From100To199 + From200To299 LT300,
LT100 + From100To199 + From200To299 + From300To999 LT1000,
LT100 + From100To199 + From200To299 + From300To999 + GE1000 Total
From ( Select Case When money < 100 Then 'LT100'
When money < 200 Then 'From100To199'
When money < 300 Then 'From200To299'
When money < 1000 Then 'From300To999'
Else 'GE1000' End Bucket,
Count(*) Count
From Table
Group By Case When money < 100 Then 'LT100'
When money < 200 Then 'From100To199'
When money < 300 Then 'From200To299'
When money < 1000 Then 'From300To999'
Else 'GE1000' End) Z