SQL技巧:使用AVG()函数计算占比

news2024/12/30 3:02:26

计算方式对比

一般计算占比,比如转换率、留存率等,都是先分组求和再相除得到结果,但是在一定的条件下,可以直接使用AVG()求出百分比

比如,要求统计报名转化率,报名转化率公式为转化率=报名人数/浏览人数

在下面图中,两种颜色分别表示了不同的计算过程:

  • 淡橘色是第一种直接方法:分别求出浏览人数(7),报名人数(4),转化率=4/7=57%
  • 蓝色是使用平均函数AVG():直接对“是否报名”列求平均数,结果也为4/7=57%,其中满足报名条件的人数(4),总人数(7)。在这里插入图片描述

题目满足两个条件:

  1. 表格中有为唯一ID值,
  2. 有判断条件的列:在“是否报名”列中,只有0和1,1表示满足了条件(已经报名),0表示没有满足条件(没有报名)。

所以,可以直接使用AVG()函数计算条件列的占比结果。而在实际过程中,上述条件都可以通过聚合计算满足,比如通过if()函数构建一个判断列。

例一:计算转换率

举个简单栗子,在牛客直播转换率这个题目中,要求:统计每个科目的转换率(sign_rate(%),转化率=报名人数/浏览人数,结果保留两位小数)。(注:按照course_id升序排序)

已知课程表course_tb如下(其中course_id代表课程编号,course_name表示课程名称,course_datetime代表上课时间):
在这里插入图片描述
用户行为表behavior_tb如下(其中user_id表示用户编号、if_vw表示是否浏览、if_fav表示是否收藏、if_sign表示是否报名、course_id代表课程编号):
在这里插入图片描述

解法

select
b.course_id,
course_name,
round(avg(if_sign)*100,2)
from behavior_tb b
left join course_tb c on c.course_id=b.course_id
group by 1,2
order by course_id asc

例二:计算新用户占比

计算每天的日活数及新用户占比
在这里插入图片描述

  • 新用户占比=当天的新用户数÷当天活跃用户数(日活数)。
  • 如果in_time-进入时间out_time-离开时间跨天了,在两天里都记为该用户活跃过。
  • 新用户占比保留2位小数,结果按日期升序排序。

解法

select
dt
,count(1) dau
,round(avg(if(cnt=1,1,0)),2) as uv_new_ratio   #是新用户返回1, 不是新用户返回0
from
(
select
    uid,
    dt,
    row_number()over(partition by uid order by dt) as cnt # 判断是否为新用户
from
(#重新构造基础表格,将进入和离开时间放在同一列
select uid, date(in_time) as dt from tb_user_log
Union
select uid,date(out_time) as dt from tb_user_log) t1
) t2
group by 1
order by dt asc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内核解读之内存管理(8)内存模型

文章目录基本的术语CONFIG_FLATMEM(平坦内存模型)稀疏的内存模型基本的术语 在介绍内存模型之前需要了解一些基本的知识。 1、什么是page frame? 在linux操作系统中,物理内存被分成一页页的page frame来管理,具体pa…

c++11 标准模板(STL)(std::deque)(八)

定义于头文件 <deque> std::deque 修改器 擦除元素 std::deque<T,Allocator>::erase iterator erase( iterator pos ); (1)(C11 前) iterator erase( const_iterator pos ); (C11 起) iterator erase( iterator first, iterator last ); (2)(C11 前) iterator …

即时编译助力人大金仓KES分析能力飞跃

随着数字化技术对各行各业的不断渗透&#xff0c;人大金仓在金融、能源、电信等行业逐步进入深水区&#xff0c;面临越来越多的核心类系统改造升级&#xff0c;这些系统不仅需要满足在线交易系统运行的高实时性要求&#xff0c;还需要保证高效分析能力以帮助客户进行业务决策。…

红米pro14笔记本系统故障怎么U盘重装系统?

红米pro14笔记本系统故障怎么U盘重装系统&#xff1f;今天和大家一起来分享如何使用U盘重装系统的方法分享。有用户的红米pro14笔记本系统出现了一些问题需要进行重新安装&#xff0c;那么今天我们就一起来分享看看怎么U盘重装系统的方法吧。 准备工作&#xff1a; 1、U盘一个&…

Java执行Linux命令死锁阻塞挂起,Runtime.getRuntime().exec阻塞卡死问题解决

1、前言&#xff1a; 最近在做一个需求需要调用linux下的ffmpeg来对处理视频&#xff0c;很简单的需求&#xff0c;我像往常一样写下如下的代码片段&#xff1a; Process process Runtime.getRuntime().exec(cmd); process.waitFor(); But当我运行代码时&#xff0c;发现代码执…

前端笔记 ---- document.execCommand 函数整理

1. 语法 使用语法 bool document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)返回值 一个 Boolean &#xff0c;如果是 false 则表示操作不被支持或未被启用。 备注&#xff1a; 在调用一个命令前&#xff0c;不要尝试使用返回值去校验浏览器的兼容性 2. 参…

基于Vue和SpringBoot的宾馆管理系统的设计和实现

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

树形结构——红黑树

前言 在 JDK1.8 之后&#xff0c;HashMap 的底层是由数组、链表、红黑树来实现的&#xff0c;当数组长度到 64 的时候&#xff0c;或者链表长度到 8 的时候&#xff0c;会调用 treeifyBin 转换为红黑树实现。因为红黑树是小伙伴们面试的时候经常被考到的知识点&#xff0c;因此…

OSPF-MGRE实验

1.首先配ip [r6]int g 0/0/1 [r6-GigabitEthernet0/0/1]ip add 192.168.1.2 24 [r6-GigabitEthernet0/0/1]int g 0/0/0 [r6-GigabitEthernet0/0/0]ip add 192.168.2.2 24 [r6-GigabitEthernet0/0/0]int g 0/0/2 [r6-GigabitEthernet0/0/2]ip add 192.168.3.2 24 [r6-GigabitEt…

git pull 和git fetch

1.git fetch 用户一&#xff1a;本地初始化项目&#xff0c;创建文件&#xff0c;保存本地仓库&#xff0c;提交远程仓库 $ git init $ touch file.txt $ git add . $ git commit -m "创建了file.txt文件" [master (root-commit) 4dcee36] 创建了file.txt文件1 file …

简单又好用的财务分析工具有哪些?

什么样的财务分析工具才能算是简单又好用&#xff1f;是能够快速完成组合多变的财务指标运算分析&#xff1b;能够充分发挥企业经营健康晴雨表作用&#xff0c;反映企业财务健康状态&#xff1b;还是能够支持多维度动态分析、自助分析&#xff1b;或者是轻松合并账套&#xff0…

跨域与JSONP

1、同源策略 1.1、什么是同源 如果两个页面的协议&#xff0c;域名和端口都相同&#xff0c;则两个页面具有相同的源。 例如&#xff0c;下表给出了相对于 http://www.test.com/index.html 页面的同源检测&#xff1a; URL 是否同源 原因 http://www.test.com/other.html…

智慧图书馆中的“智慧”体现在哪些方面?

在信息时代背景下&#xff0c;各个领域都发生了巨大变革&#xff0c;图书馆也不例外&#xff0c;开始逐步向着现代化方向发展。传统图书馆存在较多的缺陷&#xff0c;已经无法满足人们的借阅需求&#xff0c;引进信息化技术&#xff0c;打造智慧图书馆是目前图书馆的必然发展趋…

Linux学习记录——오 vim基本知识

** Linux开发工具 ** Linux开发工具——vim vim最小集 vim是一个多模式编辑器&#xff0c;vi也一样&#xff0c;但vim兼容了vi的所有指令&#xff0c;还有一些独有的特性&#xff0c;本篇只针对vim展开。vim有各种模式&#xff0c;每个模式的用法都有差别&#xff0c;模式…

【数据在内存中的存储】肝货满满

前言 我们知道在C语言中的基本内置类型&#xff1a; char //字符数据类型short //短整型int //整形long //长整形long long //更长的整形float //单精度浮点型double //双精度浮点型 那么这些类型是如何存储的呢&#xff1f; 回顾指针类型&#xff1a; *int pi*char pc*float…

String的讲解(Java系列9)

目录 前言&#xff1a; 1.String 1.1字符串的构造 1.2Sting对象的比较 1.3字符串的查找 1.4字符串的转化 1.4.1数值和字符转换 1.4.2大小写转换 1.4.3字符串转数组 1.4.4格式化 1.5字符串的替换 1.6字符串拆分 1.7字符串截取 1.8字符串去空格 1.9字符串的不可变…

Matplotlib笔记 · 绘图区域的结构和子图布局与划分(figure, axes, subplots)

文章目录1. 绘图区域的结构2. subplot系方法 ( subplot布局 )2.1 使用 add_subplot(nrows, ncols, index) 逐一创建子图2.2 控制子图大小和位置 ( add_subplot(nrows, ncols, index) 参数详解 )2.3 使用 subplots(nrows, ncols) 批量创建多张子图3. axes系方法 ( axes布局 )3.1…

基于张量变换域低秩正则化的图像恢复方法

高光谱图像、磁共振图像、RGB图像等都可以表示成三维数组的形式&#xff0c;在数学上将这种多维数组称为高阶张量&#xff0c;同样&#xff0c;上述三种图像都可以表示成三阶张量。在空间上&#xff0c;图像本身就具有结构相似性&#xff0c;在高光谱图像的第三个模态上&#x…

日志分析工具

iis、windows日志做日志分析比较麻烦&#xff0c;这里找到了一款好用的免费的日志分析工具 Log Parser Lizard&#xff0c;下载这个工具之前建议先安装LogParser虽然他会自动弹窗提示。 1. 安装软件 安装没什么好说的一直下一步下一步就行 启动之后点击OK 弹出激活页面让激活…

mod函数怎么取模

mod 是 MySQL 中的数值函数&#xff0c;写法为&#xff1a;mod(x,y)&#xff0c;意思是返回x/y的取模的值。 什么是取模&#xff1f;取模就是取余数。 ① 如果第一个值比第二个值大&#xff0c;我整理出来的取模公式就是&#xff1a;第一个值-第一个值里面包含了几个第二个值相…