MYSQL练题笔记-聚合函数-各赛事的用户注册率

一、题目相关内容

1)相关的表

2)题目

3)帮助理解题目的示例,提供返回结果的格式

二、自己初步的理解

有两张不同左右的表,用户表和赛事注册表。然后解题。

1.各种赛事的用户注册百分率

各种赛事的意味着通过contest_id进行分组。

用户注册百分率,我的理解所有用户里面注册这个赛事的百分比,分子其实就是每个赛事参加的用户,也就是分组后的记录数;分母是所有用户数。

或者利用左连接,然后通过avg(case when user_id is not null then +user_id else +0 end)函数算比率。

2.保留2位小数,利用round()。

3.结果按照percentage 降序,相同按照 contest_id,转换成代码就是order by percentage desc,contest_id。

4.加表名

然后我来思考一下,在哪些字段前面加表名。

怀疑case when user_id 要加,变为u.user_id,好吧,测试后+user_id 也要加上u.,就是下面的代码。

Select contest_id,round(avg(case when u.user_id is not null then +u.user_id else +0 end),2)as percentage from users u left join register r on u.user_id=r.user_id group by contest_id order by percentage desc,contest_id;

发现百分率的结果差别,很大,运行结果如下图。

三、错误后的再次分析

1.计算赛事用户注册百分率出现错误

发现上面的计算方式不对,我不是利用值,是利用记录数。

Count(*)/Count(u.user_id) ,这个结果都是1,但是不是左连接吗?

oh,我找答案算了。下面是我找到的题解。

select contest_id, round(100*count(user_id)/(select count(1) from users),2) as percentage from Register group by contest_id order by 2 desc, 1;

好吧确实是我第一个想法是对的,就是每个赛事参加的用户,也就是分组后的记录数;分母是所有用户数。

分析题解里的count(u.user_id)和count(*):

这里count(1),用count(*)代替也有结果,就是速度不一样。

但是count(u.user_id) 这个是必须的,因为不统计NULL。

2.发现还是出错,他还是设置了一个null的,就是有可能有人什么赛事都没有参加,我又忘记了!!!根本不用左连接就行了,啊啊啊啊啊啊啊啊,而且我才发现我找的都没有连接,下面是我最终通过的答案。

Select contest_id,round(100*count(u.user_id)/(select count(*) from users),2)as percentage from users u join register r on u.user_id=r.user_id group by contest_id order by percentage desc,contest_id;

3.题解与我的不同,所以我也不用连接,而且他的排序用的2,1很有意思,应该就是这张表拍第一的字段和排第二的字段,下面是我修改过后的题解

Select contest_id,round(100*count(user_id)/(select count(*) from users),2)as percentage from register group by contest_id order by percentage desc,contest_id;

四、总结

1.这种计算百分比的,我发现自己还是比较容易出错的

2.到底是连接没理解对,空值存在的情况还是没考虑好。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现FA萤火虫优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , …

数据结构学习笔记——广义表

目录 一、广义表的定义二、广义表的表头和表尾三、广义表的深度和长度四、广义表与二叉树(一)广义表表示二叉树(二)广义表表示二叉树的代码实现 一、广义表的定义 广义表是线性表的进一步推广,是由n(n≥0&…

4.grid_sample理解与使用

pytorch中的grid_sample 文章目录 pytorch中的grid_samplegrid_samplegrid_sample函数原型实例 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 grid_sample 直译为网格采样,给定一个mask patch,根据在目标图像上的…

C语言 操作符详解

C语言学习 目录 文章目录 前言 一、算术操作符 二、移位操作符 2.1 左移操作符 2.2 右移操作符 三、位操作符 3.1 按位与操作符 & 3.2 按位或操作符 | 3.3 按位异或操作符 ^ 四、赋值操作符 五、单目操作符 5.1 逻辑反操作符! 5.2 正值、负值-操作符 5.3 取地址…

前端项目中获取浏览器版本的方法

在我们的前端项目中,navigator.userAgent属性含有当前浏览器相关信息(比如版本号)。 所以当我们想要获取用户当前访问的浏览器的版本时直接去解析navigator.userAgent字段就中。 废话不多说,下面看封装的获取浏览器版本的函数&am…

Learning Normal Dynamics in Videos with Meta Prototype Network 论文阅读

文章信息:发表在cvpr2021 原文链接: Learning Normal Dynamics in Videos with Meta Prototype Network 摘要1.介绍2.相关工作3.方法3.1. Dynamic Prototype Unit3.2. 视频异常检测的目标函数3.3. 少样本视频异常检测中的元学习 4.实验5.总结代码复现&a…

STM32串口接收不定长数据(空闲中断+DMA)

玩转 STM32 单片机,肯定离不开串口。串口使用一个称为串行通信协议的协议来管理数据传输,该协议在数据传输期间控制数据流,包括数据位数、波特率、校验位和停止位等。由于串口简单易用,在各种产品交互中都有广泛应用。 但在使用串…

基础堆溢出原理与DWORD SHOOT实现

堆介绍 堆的数据结构与管理策略 程序员在使用堆时只需要做三件事情:申请一定大小的内存,使用内存,释放内存。 对于堆管理系统来说,响应程序的内存使用申请就意味着要在"杂乱"的堆区中"辨别"出哪些内存是正在…

Python的文件的读写操作【侯小啾Python基础领航计划 系列(二十七)】

Python_文件的读写操作【侯小啾Python基础领航计划 系列(二十七)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

实验案例二:多表查询

1、表联接类型。 表联接类型可以分为内联接.外联接和交叉联接等。 1.内联接。 内联接〈 inner join)是最常用的-一-种联接方式,只返回两个数据集合之间匹配关系的行,将位于两个互相交叉的数据集合中重叠部分以内的数…

“影响力”经济:抖音为什么更值得商家、达人长期深耕?

文|新熔财经 作者|叶一城 数亿的活跃用户,简单而自然的切入方式,快速、高频的执行效率,让抖音对电商界的冲击无可阻挡。 这背后,流量玩法登峰造极,是很多人的直接观感。 但实际上&#xff0…

原生横向滚动条 吸附 页面底部

效果图 /** 横向滚动条 吸附 页面底部 */ export class StickyHorizontalScrollBar {constructor(options {}) {const { el, style } optionsthis.createScrollbar(style)this.insertScrollbar(el)this.setScrollbarSize()this.onEvent()}/** 创建滚轴组件元素 */createS…