GROUP BY...WITH ROLL UP 分组统计后的再合计

原创 2016年08月29日 15:51:34

GROUP BY...WITH ROLL UP 是group by 的高配版,在group by 分组之后,再合计总数。

ex:求8月1号到9号每日投资人数  

SELECT
COUNT(DISTINCT investor_uid)AA,
FROM_UNIXTIME(add_time, '%Y-%m-%d')BB
FROM
lzh_borrow_investor
WHERE
FROM_UNIXTIME(add_time) BETWEEN '2016-8-1 00:00:00'
AND '2016-8-10 00:00:00'
GROUP BY
FROM_UNIXTIME(add_time, '%Y-%m-%d') WITH ROLLUP;

结果如下:

AA           BB

3 2016-08-01
1 2016-08-02
3 2016-08-03
4 2016-08-04
1 2016-08-05
1 2016-08-06
3 2016-08-07
6 2016-08-08
4 2016-08-09
25


很奇怪对不对,3+1+3+4+1+1+3+6+4!=25,这是因为distinct这个关键词。每日的投资人数和1-9号总投资人数是不同的,roll up 去重了。另外如果group by 了2个列,with rollup 也会分别统计第一个列,再统计两个列;举个网上找的例子:

SELECT  
      CASE WHEN (GROUPING(SEX) = 1) THEN '统计-ROLLUP' 
            ELSE ISNULL(SEX, 'UNKNOWN') 
       END AS SEX , 
      CASE WHEN (GROUPING([DEPARTMENT]) = 1) THEN '统计-ROLLUP' 
            ELSE ISNULL([DEPARTMENT], 'UNKNOWN') 
       END AS [DEPARTMENT], 
        COUNT(0) 
FROM DBO.[STAFF] 
GROUP BY   SEX,[DEPARTMENT]   WITH ROLLUP


与group by ...with rollup 孖生用法是  group by ...cube 二者都适用于sql server ,不过这个cube在mysql 中并不适用。

with cube 与with rollup的不同点在于:

使用 ROLLUP 会先统计分组下的,然后在对GROUP BY的第一列字段进行统计,最后计算总数,而 CUBE 则是先分组统计,然后统计GRUOP BY 的每个字段,最后进行汇总。

举个cube例子:

SELECT  
      CASE WHEN (GROUPING(SEX) = 1) THEN '统计-CUBE' 
            ELSE ISNULL(SEX, 'UNKNOWN') 
       END AS SEX ,
      CASE WHEN (GROUPING([DEPARTMENT]) = 1) THEN  '统计-CUBE' 
            ELSE ISNULL([DEPARTMENT], 'UNKNOWN') 
       END AS [DEPARTMENT], 
        COUNT(0) 
FROM DBO.[STAFF] 
GROUP BY   SEX,[DEPARTMENT]  WITH CUBE



SQL 统计分组 Group By和Compute By的整理

SQL 数据统计方面常用到的数据分组,Gruop By和Compute By之间的使用和区别,以及Having和Where条件字句之间的区别!...
  • CrazyMo_
  • CrazyMo_
  • 2015年03月15日 16:07
  • 3066

group by 和count的联合使用问题

今天写查询语句遇到一个问题,就是用group by进行分组以后,用count统计分组以后的个数, 开始写的语句大体是: select count(m.fbrandid)   from ta...
  • huaishuming
  • huaishuming
  • 2015年05月18日 16:55
  • 9569

使用Group by分组统计.rar

  • 2010年07月02日 13:12
  • 43KB
  • 下载

SqlServer中Group By高级使用--Inner Join分组统计

  • 2012年11月11日 17:04
  • 70KB
  • 下载

通过GROUP BY grouping sets提升数据分组统计效率

使用 GROUPING SETS 的 GROUP BY 子句可以生成一个等效于由多个简单 GROUP BY 子句的 UNION ALL 生成的结果集 示例:(sql server 2008 R2) ...
  • vince6799
  • vince6799
  • 2012年03月05日 17:18
  • 7793

sql的分组统计与group by 日期的处理

近几天补oracle的sql知识,这块记录下sql的分组统计 1.简单的分组统计 创建STUDENT表: CREATE TABLE STUDENT( "NAME" VARCHAR2(10 BYT...
  • u010652906
  • u010652906
  • 2015年07月27日 03:47
  • 765

awk实现group by功能分组统计条数

log日志初始文件内容如下:' "2017-04-26 09:23:04","ac:c1:ee:3c:f9:63","http://www.wangfanwifi.com:16621/api/p...
  • iamlihongwei
  • iamlihongwei
  • 2017年04月28日 15:36
  • 2630

mysql group by having用法+having where之间的区别+group by按日期分组统计的查询

以下是count,group by,having的一些用法,以图书价格表为例 ---所有书籍价格的统计 select sum(price)总价,avg(price)均价,max(pri...
  • liujihaozhy
  • liujihaozhy
  • 2015年12月23日 15:42
  • 1573

mysql group by having用法+having where之间的区别+group by按日期分组统计的查询

以下是count,group by,having的一些用法,以图书价格表为例---所有书籍价格的统计select sum(price)总价,avg(price)均价,max(price)最高价,min...
  • zqtsx
  • zqtsx
  • 2014年12月11日 17:07
  • 3679

java:Mongodb 分组统计应用group的使用(含场景)

------------------------场景----------------- mongodb中数据集合(ABC123)包含的指标进行统计分析,指标(指标在mongodb中实际以字母、数字组...
  • MCpang
  • MCpang
  • 2012年11月30日 10:17
  • 19940
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GROUP BY...WITH ROLL UP 分组统计后的再合计
举报原因:
原因补充:

(最多只允许输入30个字)