最近有需求需要显示出一个数据集中[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表中能起到标示作用的字段