mysql with rollup 多组统计 如何去掉子项汇总,保留最后条汇总?

「已注销」 2012-11-12 09:26:51
如题,现有报表统计需求,需统计每天的工作量,但不想显示子项统计,只想保留最后一条统计数据,该如何写语句?
代码如下:

CREATE TABLE `work_log` (
`id` int(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT '',
`work_date` varchar(10) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1;

insert into work_log(name,work_date) values
('1000','2012-10-11'),('1000','2012-10-12'),('1000','2012-10-13'),('1000','2012-10-14'),('1001','2012-10-11'),('1001','2012-10-12'),('1001','2012-10-13')
,('1001','2012-10-14'),('1001','2012-10-16'),('1002','2012-10-11');

select name,work_date ,count(*) as counts
from work_log 
group by name,work_date
with ROLLUP;


+------+------------+--------+
| name | work_date | counts |
+------+------------+--------+
| 1000 | 2012-10-11 | 1 |
| 1000 | 2012-10-12 | 1 |
| 1000 | 2012-10-13 | 1 |
| 1000 | 2012-10-14 | 1 |
| 1000 | NULL | 4 |
| 1001 | 2012-10-11 | 1 |
| 1001 | 2012-10-12 | 1 |
| 1001 | 2012-10-13 | 1 |
| 1001 | 2012-10-14 | 1 |
| 1001 | 2012-10-16 | 1 |
| 1001 | NULL | 5 |
| 1002 | 2012-10-11 | 1 |
| 1002 | NULL | 1 |
| NULL | NULL | 10 |
+------+------------+--------+
14 rows in set (0.03 sec)

如上,想把

1000 | NULL | 4
1001 | NULL | 5
1002 | NULL | 1

这种统计行去掉不显示,只显示最下面的那条统计,改如何写语句呢?
...全文
516 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2012-11-14
  • 打赏
  • 举报
回复
引用 5 楼 ACMAIN_CHM 的回复:
SQL code? 12345 select name,work_date ,count(*) as counts from work_log  group by name,work_date having isnull(name) xor isnull(work_date)=0 with ROLLUP;
额 俺也没整过 XOR 第一次看到这个词, 上面的语句改成

select name,work_date ,count(*) as counts 
from work_log 
group by name,work_date 
with ROLLUP 
having isnull(name) xor isnull(work_date)=0 
可以正常运行
nicenight 2012-11-13
  • 打赏
  • 举报
回复
引用 5 楼 ACMAIN_CHM 的回复:
SQL code12345select name,work_date ,count(*) as countsfrom work_log  group by name,work_datehaving isnull(name) xor isnull(work_date)=0with ROLLUP;
我从来没用过 xor 这个关系符!学习学习,哈哈。
mysdzlt2007 2012-11-12
  • 打赏
  • 举报
回复
后边加having条件也行
HAVING (`name` IS NOT NULL AND work_date IS NOT NULL) OR (`name` IS NULL AND work_date IS NULL)
nicenight 2012-11-12
  • 打赏
  • 举报
回复
这样也行:
select name,work_date ,count(*) as counts
from work_log
group by name,work_date
union 
select null,null,count(*) as counts
from work_log
WWWWA 2012-11-12
  • 打赏
  • 举报
回复
select *from (select name,work_date ,count(*) as counts from work_log  group by name,work_date with ROLLUP) b where name is not null and work_date is null and counts is not null
ACMAIN_CHM 2012-11-12
  • 打赏
  • 举报
回复
select name,work_date ,count(*) as counts
from work_log  
group by name,work_date
having isnull(name) xor isnull(work_date)=0
with ROLLUP;
「已注销」 2012-11-12
  • 打赏
  • 举报
回复
感谢以上回答!~

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧