分组统计及占比分析

题目背景:

统计各性别消费情况(字段包含性别、⼈数、⼈数占⽐、⼈均消费、消费⾦额、消费占⽐) 并以消费

占⽐降序。

这个题目咋一看,觉得非常简单,不就是一个分组就OK了吗,分组是没问题的,但分组之后呢,你能正常在分组的情况下,再获取整个数据集的信息吗,显然在一次查询中是没法完成整个任务的,只有真正在做的时候,才发现不一般,如果以前没接触过的,可能半天也找不出方法来解决。

如下提供两个方法来解决这个问题。

1)方法一:采用我们前面讲述的笛卡尔集。

我们最终的目标是要在查询中获取男生的人数以及整体的人数。显然在分组的时候,是没法再查询到整体数据集的,故无论如何都要套一层子查询

先不讲这个题目的源码,我们先讲一个简单的例子来由浅入深的描述这个问题。假设现在又两个表,分别为

create table t1(c1 varchar(10));
insert into t1 values('1');
insert into t1 values('2');
insert into t1 values('3');create table t2(c2 varchar(10));
insert into t2 values('10');

好,我们先看看数据集

笛卡尔集1的构建方式:


SELECT t1.c1, t2.c2,t1.c1/t2.c2 as rateFROM t1,t2

笛卡尔集2的构建方式join,这也是我前期在查询网络的时候,一直在描述on 1=1 的情况,看的我也是很懵。我们运行后,看看结果是什么样。

SELECT t1.c1, t2.c2,t1.c1/t2.c2 as rateFROM t1 join t2 on 1=1 ;

懂了吧,我们笛卡尔集一个表,这个表仅含一个数据,使用笛卡尔集。

好了,我们在根据这个思想进行整理。

SELECT c.gender,c.id_num,c.GMV,c.avg_sale,c.id_num/b.total_id
from
((SELECT gender,
count(DISTINCT user_id) as id_num ,
sum(purchase) GMV,
sum(purchase)/count(DISTINCT user_id ) as avg_sale
from lagou_lxy.model2_datas GROUP BY gender) c join (SELECT count(DISTINCT user_id) as total_id from model2_datas ) b on 1=1)

2)方法二,使用开窗的窗口函数sum()over ( ),这个方法是极力推荐的一种方式。

--第二层使用sum的开窗函数,一并计算出人数的和以及销售额的和后,在计算占比
select sub.gender,id_num/sum(sub.id_num)over() AS id_rate,sGMV,GMV/sum(GMV)OVER() as GMV_rate,avg_sale
from --第一层先计算出性别、人数、销售额、平均销售额(SELECT gender,count(DISTINCT user_id) as id_num ,sum(purchase) GMV,sum(purchase)/count(DISTINCT user_id ) as avg_salefrom lagou_lxy.model2_datas GROUP BY gender) sub
order by  GMV_rate desc ;

还有跟多的SQL问题,烦请关注数据分析专栏(专栏包含了MySQL的理论讲解,项目实操落地,SQL中重点难点题目分享知识外,还包含数据分析中可视化,数据挖掘等)

MySQL分组统计及占比分析的方法实现相关推荐

  1. 零基础带你学习MySQL—分组统计(十二)

    零基础带你学习MySQL-分组统计(十二) 如何理解分组 ? 课后练习题

  2. Mysql——分组统计

    ???前言 ??作者简介:友友们大家好,我是你们的小王同学??? ??个人主页:小王同学??**** ?? 系列专栏:牛客刷题专栏??**** ?? 推荐一款非常火的面试.刷题神器??牛客刷题 觉得小 ...

  3. mysql 分组统计 及 统计结果横向展示

    文章目录 范围分组 需求说明 示例 sum 与 case when组合 类别值分组 需求说明 示例 group by . sum 与 case when组合 本文主要介绍mysql常用的两种分组情况: ...

  4. mysql 分组统计

    文章包含mysql多种分组统计年 月 日 周 天 附带sql表结构以及说明 mysql表结构如下 1. CREATE TABLE `数据库名称`.`Untitled` (`id` bigint(0) ...

  5. mysql每组结果分页显示_SQL语句mysql分组统计并对每组分页

    最近一个需求如图,为了避免多次查询数据库,就想着尽量写成一个SQL语句 最相关人物 最相关联系方式 最相关邮箱 最相关地址 张三 23 18900000000 24 本人 12 广东省深圳市龙华区某某 ...

  6. mysql 分组统计 每天_MySQL按时间分组统计每天的数量

    直接上代码: select CREATED_DATE,COUNT(*) as day_count from tb where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) ...

  7. mysql 分组统计 原则_mysql数据库分组统计--根据时间分组统计

    引言 环境上有一个实时表库,该表存储了一天24小时定时任务.马上打算进行软件升级,领导让分析一下,什么时间升级软件,对程序的影响最小. 这样就需要进行数据统计,按小时进行分组,统计出每个小时的运行任务 ...

  8. mysql分组统计having_mysql group by和having实例详解

    1.首先,来看Group by子句 group by 分组.mysql允许我们按照某一列将数据进行分组. 举一个例子,例如:有一个单位,包括5个部门,我们为每个部门的员工建立了一条数据,包括员工编号( ...

  9. mysql 分组统计 取最大值_(Mysql)sql分组取最大值问题

    相信有很多开发人员都会碰到分组取最大值的问题,以及分组取前几个值或后几个值问题.今天开发中遇到了类似问题,百度学习了一波,自己写了个简单明了的小demo,有兴趣的同学可以参考一下,如有不对的地方请多多 ...

最新文章

  1. php从数据库读取中文显示问号??的解决办法
  2. 7 12次c语言上机作业,第十二次C语言上机实验参考答案
  3. sublime搭建C/C++编译环境(超完美的配置并配上内容详细讲解!!)
  4. 四管前级怎么去掉高低音音调_TDG Audio达芬奇:什么是前级,后极?
  5. 580分左右的计算机院校,2021年高考580分可以上什么大学 580分左右的院校
  6. 安卓导航无信号无服务器,无信号导航能用否
  7. 匿名管道和pipe函数
  8. sap gui mac下载_SAP|叮咚,您有一份来自SAP的邀请,请签收
  9. html事件绑定的方法,如何获取html元素所绑定的事件
  10. 【php】基础学习4
  11. Java - 谈一谈测试驱动开发(TDD)的好处以及你的理解。
  12. 从破解APP开始学Android——用户登录验证
  13. 百词斩不复习_不背单词,墨墨背单词和百词斩哪个好啊?
  14. 北京科技大学计算机专业选课要求,北京科技大学2020年拟在北京招生专业选考科目要求...
  15. 静态路由——手写路由表及综合实验
  16. 设计模式---装饰器模式(C++实现)
  17. C语言刷题系列——5.使用函数判断完全平方数
  18. 解决Eclipse打开某个workspace报错:The project description file (.project) for (项目名)
  19. C语言浮点数IEEE754
  20. CentOS7内网穿透(公网访问内网)SakuraFrp-frpc配置(从0开始)

热门文章

  1. org.hibernate.TypeMismatchException: Provided id of the wrong type for class cn.itheima.domain.Custo
  2. IDEA包的显示格式
  3. java牛顿法求方程根_C程序习题-用牛顿迭代法求方程的根[6.12]
  4. HTML img图片的导入方式
  5. 大数据行业怎么样?真的好找工作么?
  6. 算法给小码农冒泡排序铭纹,快速排序四极
  7. all the mess, fucking messed up all the fuck things
  8. 【R语言与数据分析实战】数据操作(一):基于向量的处理与外部数据处理
  9. 12.软件项目管理笔记
  10. AI人脸检测智能分析网关新增车辆检测/车牌识别,支持车辆违停告警