sql报表书写技巧
上一篇 /
下一篇 2008-10-16 19:20:13
/ 个人分类:mysql
我们在用sql生成报表的时候,很大的难点就是如何生成自己想要的样式和结果。尤其在限制我们只能用一条sql语句搞定时。下面一个例子是如何用一条sql生成如下一张报表 :
| 统计报表 |
| 专题 | 时间 |
| 08-10-13 | 08-10-14 | 08-10-15 | 08-10-16 | 08-10-17 | 08-10-18 | 08-10-19 | 总计 |
| 主专题 | A用户表统计 | | | | | | | | 0 |
| B用户表统计 | | | | | | | | 0 |
| C用户表统计 | | | | | | | | 0 |
| 总计 | | | | | | | | 0 |
select
t1.fdate ,
sum(ifnull(t2.A用户表统计,0)) A,
sum( ifnull(t3.B用户表统计,0)) B,
sum( ifnull(t4.C用户表统计,0)) C,
fromt_DateJoin_Tempt1
left join
(
SELECT
date(FRegisterTime) as regdate,
count( FUserId) as A用户表统计
FROM
TABLE_A
where date(FRegisterTime) between '2008-09-17' and '2008-12-31'
group by regdate
)t2 on(t1.fdate = t2.regdate)
left join
(
SELECT
date(FCreateTime) as regdate,
count( FUserId) as B用户表统计
FROM
TABLE_B
where date(FCreateTime) between '2008-09-17' and '2008-12-31'
group by regdate
)t3 on (t1.fdate = t3.regdate)
left join
(
SELECT
date(FCreateTime) as regdate,
count( FUserId) as C用户表统计
FROM
TABLE_C
where date(FCreateTime) between '2008-09-17' and '2008-12-31'
group by regdate
)t4 on (t1.fdate = t4.regdate)
where t1.fdate between '2008-09-17' and date(now())
group by fdate
with rollup
上面表红色的为重点注意的:
1、with rollup: 在Select中运用count 或 sum对分组统计时,会在结果集的最后一条自动产生一条各组数据的统计之和!,
with rollup之前好像不能有having,否则报错
2、在group中,注意where 和 having的位置及关系
3、在我们数据库中通常可建立一张表(t_DateJoin_Temp):存储连续的日期,以供生成连续日期的报表使用,
以解决相关连的数据表(TABLE_A)中日期不连续的问题
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
SQL
sql