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



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

使用Group by分组统计.rar

  • 2010-07-02 13:12
  • 43KB
  • 下载

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

近几天补oracle的sql知识,这块记录下sql的分组统计 1.简单的分组统计 创建STUDENT表: CREATE TABLE STUDENT( "NAME" VARCHAR2(10 BYT...

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

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

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

使用 GROUPING SETS 的 GROUP BY 子句可以生成一个等效于由多个简单 GROUP BY 子句的 UNION ALL 生成的结果集 示例:(sql server 2008 R2) ...

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
  • 2785

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

------------------------场景----------------- mongodb中数据集合(ABC123)包含的指标进行统计分析,指标(指标在mongodb中实际以字母、数字组...
  • MCpang
  • MCpang
  • 2012-11-30 10:17
  • 18939

mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法。

写博客真实个费时费力的差事,好佩服那些博客阅读几十上百万的人。今天研究了半天按照日期分组统计,没有数据就为空了,我要让他显示0呀。想了办法,都没有找到一个好的,解决方案,然后用了一个很low的方法实现...

Oracle中SQL语句学习五(统计分组语句group by和having)

在应用系统开发中,进行需要统计数据库中的数据,当执行数据统计时,需要将表中的数据进行分组显示,在统计分组中是通过group by子句、分组函数、having子句共同实现的。其中group by子句用于...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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