在存储桶缺失的SQL Server中计算直方图

问题描述 投票:0回答:1

我有以下数据集:

    | 0 |
    | 0 |
    | 0 |
    | 1 |
    | 1 |
    | 1 |
    | 1 |
    | 1 |
    | 1 |
    | 2 |
    | 2 |
    | 2 |
    | 2 |
    | 2 |
    | 2 |
    | 2 |
    | 3 |
    | 3 |
    | 3 |
    | 4 |
    | 4 |
    | 4 |
    | 4 |
    | 4 |
    | 4 |
    | 6 |
    | 6 |
    | 6 |
    | 7 |
    | 7 |
    | 7 |
    | 7 |
    | 8 |
    | 8 |
    | 8 |
    | 9 |
    | 9 |
    | 14 |
    | 16 |
    | 21 |
    | 28 |
    | 30 |
    | 32 |
    | 57 |

我有以下SQL查询:

select bucket_floor,
CONCAT(bucket_floor, ' to ', bucket_ceiling-1) as bucket_name,
count(*) as count
  from (
      select 
          floor([value]/5)*5 as bucket_floor,
          floor([value]/5)*5 + 5 as bucket_ceiling
      from @URQuartileDataRaw
        ) a
        group by bucket_floor, CONCAT(bucket_floor, ' to ', bucket_ceiling-1)
        order by bucket_floor;

运行时,我得到以下信息:

    |Bucket_Name|Release_Count|
    |0 to 4     |25
    |5 to 9     |12
    |10 to 14   |1
    |15 to 19   |1
    |20 to 24   |1
    |25 to 29   |1
    |30 to 34   |2
    |55 to 59   |1

我如何为35到39、40到44、45到49、50到54插入存储桶,因为数据集中没有这些存储桶的数据,但是我需要它们,因为此数据可以提供图表?

sql sql-server
1个回答
0
投票

使用values()或类似方法生成存储桶,然后使用left join

select v.bucket, count(dr.value)
from (values (0, 4, '0 to 4'),
             (5, 9, '5 to 9'),
             . . . 
     ) v(bucket, lo, hi) left join
     @URQuartileDataRaw dr
     on dr.value between v.lo and v.hi
group by v.bucket, v.lo
order by v.lo;
© www.soinside.com 2019 - 2024. All rights reserved.