sql-server - 在 SQL Server 中生成直方图

标签 sql-server

我正在使用 SQL Server 2012,需要生成直方图,概念上类似于 Google's screener

这个想法是将所有价格分成 100 个大小相等(基于价格)的桶,然后每个桶包含许多价格在该桶的最小值和最大值内的商品。 NTILE 不起作用——它试图在桶之间平均分配项目(基于计数)。

所以,这就是我到目前为止所拥有的:

select bucket, count(*) from (select cast((PERCENT_RANK() OVER(ORDER BY Price DESC)) *   100 as int) as bucket  from MyTable
where DataDate = '4/26/2012') t group by bucket

这是在 SQL Server 2012 中生成直方图的好方法吗?有没有内置的 SQL Server 2012 可以完成此任务或更好的方法?

谢谢

最佳答案

也许像这样:

with cte as (
  select base = 1 + u + t*3 from (
    select 0 as u union all select 1 union all select 2
  ) T1
  cross join (
    select 0 as t union all select 1 union all select 2
  ) T2
), data as (
  select * 
  from ( 
   values (1,1,2,3,3,5,7,4,2,1)
  ) data(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9)
)
select cte.base
  ,case when x0>=base then 'X' else  ' ' end as x0
  ,case when x1>=base then 'X' else  ' ' end as x1
  ,case when x2>=base then 'X' else  ' ' end as x2
  ,case when x3>=base then 'X' else  ' ' end as x3
  ,case when x4>=base then 'X' else  ' ' end as x4
  ,case when x5>=base then 'X' else  ' ' end as x5
  ,case when x6>=base then 'X' else  ' ' end as x6
  ,case when x7>=base then 'X' else  ' ' end as x7
  ,case when x8>=base then 'X' else  ' ' end as x8
  ,case when x9>=base then 'X' else  ' ' end as x9
from cte
cross join data
order by base desc
;

它很好地产生了这个直方图:

base        x0   x1   x2   x3   x4   x5   x6   x7   x8   x9
----------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
9                                                         
8                                                         
7                                         X               
6                                         X               
5                                    X    X               
4                                    X    X    X          
3                          X    X    X    X    X          
2                     X    X    X    X    X    X    X     
1           X    X    X    X    X    X    X    X    X    X

请记住首先将数据转换为单行。

为了获得更紧凑的演示,请将各个数据列连接成一个长字符串。

关于sql-server - 在 SQL Server 中生成直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16268441/

相关文章:

sql - CASE 语句别名上的 WHERE 子句

sql-server - 索引 View : Union All/Full Join alternatives

sql - 在数据库中存储不同图像的最佳方式是什么?

python - SQLCLR 和 IronPython

Python3、pyodbc、SQL Server : Supplying Unicode and ANSI string as needed

sql-server - sql错误中的子查询

sql - 使用 bacpac 导入数据层应用程序

sql - SQL Server 中的嵌套窗口函数

sql-server - 在非常复杂的情况下强制数据透视表刷新

javascript - 当列名包含空格时如何使用 SQL 查询 Javascript 对象?