我对SQL非常陌生并且希望创建一个直方图,它应该如下所示 - 2列,一列带有“z”值,范围从0到1,间隔为0.01,第二列将包括每个间隔的计数(z)。在视觉上,它应该看起来像这样:
z | count(z)
-------------
0-0.01| 12312
0.01 - 0.02 | 143565
0.02 - 0.03 | 23445
依旧......
我尝试循环,连接字符串并使用EXEC,但似乎没有任何工作:( 我最需要提取一些有用的数据是使用下面的代码,它产生一个2D矩阵,第一列包含数据,其余为NULL:
DECLARE @i float = 0
WHILE @i < 0.1
BEGIN
exec ('select count(z) as ''' +@i +''' from specObj where z BETWEEN
' +@i +' and (' +@i +'+0.01)')
SET @i = @i + 0.01
END
由于
答案 0 :(得分:0)
无需循环。只需在group by
中使用一些算术。这是基本的想法:
select cast(z * 100 as int)/100.0 as range_start, (1 + cast(z * 100 as int))/100.0 as range_end,
count(*)
from table t
group by cast(z * 100 as int);
实际上将范围开始和范围结束转换为字符串(例如'[0.01-0.02]'
)需要字符串操作,这可能取决于特定数据库,而问题中未指定。