报表统计中人数的分组合计问题
有如下的明细表:
食堂名称 窗口名称 消费金额 消费人
一食堂 米饭窗口 1 张三
一食堂 米饭窗口 2 张三
一食堂 米饭窗口 3 李四
一食堂 小炒窗口 4 张三
一食堂 小炒窗口 5 张三
五食堂 炒菜窗口 6 王五
五食堂 炒菜窗口 7 赵六
五食堂 炒菜窗口 8 赵六
五食堂 炒菜窗口 9 陈七
五食堂 面点窗口 10 王五
五食堂 面点窗口 11 赵六
五食堂 面点窗口 12 李四
五食堂 面点窗口 13 王五
要形成如下的报表:
食堂名称 窗口名称 消费总额 消费人次 消费人数
一食堂 米饭窗口 6 3 2
小炒窗口 9 2 1
小计 15 5 2
五食堂 炒菜窗口 30 4 3
面点窗口 46 4 3
小计 76 8 4
合计 91 13 5
请注意,消费人次是可以简单按分组来加和的,但是消费人数在小计和合计行中是不能简单相加的,只能单独从明细统计,但是这种统计会非常麻烦,请问大家对这种报表是怎么处理的,有没有什么好方法?
[解决办法]
什么数据库?
select 食堂名称,窗口名称,sum(消费金额),count(*),count(distinct 消费人) as 消费人数
from tt group by 食堂名称,窗口名称
union
select 食堂名称,'小计',sum(消费金额),count(*),count(distinct 消费人) as 消费人数
from tt group by 食堂名称
[解决办法]
mysql> select * from zhaojin1975;+----------+----------+----------+--------+| 食堂名称 | 窗口名称 | 消费金额 | 消费人 |+----------+----------+----------+--------+| 一食堂 | 米饭窗口 | 1 | 张三 || 一食堂 | 米饭窗口 | 2 | 张三 || 一食堂 | 米饭窗口 | 3 | 李四 || 一食堂 | 小炒窗口 | 4 | 张三 || 一食堂 | 小炒窗口 | 5 | 张三 || 五食堂 | 炒菜窗口 | 6 | 王五 || 五食堂 | 炒菜窗口 | 7 | 赵六 || 五食堂 | 炒菜窗口 | 8 | 赵六 || 五食堂 | 炒菜窗口 | 9 | 陈七 || 五食堂 | 面点窗口 | 10 | 王五 || 五食堂 | 面点窗口 | 11 | 赵六 || 五食堂 | 面点窗口 | 12 | 李四 || 五食堂 | 面点窗口 | 13 | 王五 |+----------+----------+----------+--------+13 rows in set (0.00 sec)mysql> select `食堂名称`,`窗口名称`,sum(`消费金额`) as `消费总额`,count(*) as `消费人次`,count(distinct `消费人`) as `消费人数` -> from zhaojin1975 -> group by `食堂名称`,`窗口名称` -> WITH ROLLUP;+----------+----------+----------+----------+----------+| 食堂名称 | 窗口名称 | 消费总额 | 消费人次 | 消费人数 |+----------+----------+----------+----------+----------+| 五食堂 | 面点窗口 | 46 | 4 | 3 || 五食堂 | 炒菜窗口 | 30 | 4 | 3 || 五食堂 | NULL | 76 | 8 | 4 || 一食堂 | 米饭窗口 | 6 | 3 | 2 || 一食堂 | 小炒窗口 | 9 | 2 | 1 || 一食堂 | NULL | 15 | 5 | 2 || NULL | NULL | 91 | 13 | 5 |+----------+----------+----------+----------+----------+7 rows in set (0.06 sec)mysql>