最近有需求需要显示出一个数据集中[0,100]区间里每个整数对应的记录数

如果直接使用

SELECT Floor(num) as Num ,Count(*) FROM T GROUP BY Floor(num)

会出现当这个整数对应的记录数为0 的时候 就不会显示这个0

解决这个问题 先新建了一张表 只有一个字段 为从0 开始的整数序列

用一个存储过程来生成:

begin
declare i int;
set i = 2;
while i <= 100 do
	INSERT INTO GroupNum VALUEs(i);	
set i = i + 1;
end while;
end

然后使用如下的SQL语句即可生成统计数据

SELECT
	GroupNum.GroupNum ,
	CASE
WHEN(
	(
		SELECT
			name
		FROM
			T
		WHERE
			FLOOR(num) = GroupNum.GroupNum
		LIMIT 0 ,
		1
	)
) IS NULL THEN
	(COUNT(*) - 1)
ELSE
	(COUNT(*))
END
FROM
	GroupNum
LEFT JOIN Te ON(
	GroupNum.GroupNum = FLOOR(num)
)
GROUP BY
	GroupNum.GroupNum;

其中:

T 为需要统计的表

num为表中需要统计数字的字段

name为T表中能起到标示作用的字段