MySQL–第4关:查询用户日活数及支付金额

news2024/11/24 11:10:15

MySQL–第4关:查询用户日活数及支付金额 – WhiteNight's Site

标签:MySQL

非常好的题,爱来自中国。

题目

没啥用

任务描述

现有3张业务表,详见如下:

,

需要输出结果如下,没有支付的日期不需要显示,请写出对应的MYSQL

,

示例1 输入: CREATE TABLE new_useruser_id int(11) NOT NULL, is_new int(11) NOT NULL, PRIMARY KEY (user_id) ); CREATE TABLE user_payuser_id int(11) NOT NULL, pay_money int(11) NOT NULL, dt char(20) NOT NULL ); CREATE TABLE login_recorduser_id int(11) NOT NULL, login_time char(20) NOT NULL, dt char(20) NOT NULL ); insert into new_user values(1,0); insert into new_user values(2,1); insert into new_user values(3,1); insert into new_user values(4,0); insert into new_user values(5,0); insert into new_user values(6,1); insert into new_user values(7,0); insert into new_user values(8,1); insert into user_pay values(1,30,’2021-11-10′); insert into user_pay values(1,100,’2021-11-10′); insert into user_pay values(2,500,’2021-11-11′); insert into user_pay values(2,200,’2021-11-12′); insert into user_pay values(3,1000,’2021-11-10′); insert into user_pay values(4,800,’2021-11-12′); insert into user_pay values(6,1200,’2021-11-10′); insert into user_pay values(6,700,’2021-11-14′); insert into login_record values(1,’8:00′,’2021-11-10′); insert into login_record values(1,’12:00′,’2021-11-10′); insert into login_record values(1,’13:00′,’2021-11-10′); insert into login_record values(2,’16:00′,’2021-11-10′); insert into login_record values(2,’12:35′,’2021-11-11′); insert into login_record values(2,’18:34′,’2021-11-12′); insert into login_record values(3,’20:00′,’2021-11-10′); insert into login_record values(4,’21:00′,’2021-11-12′); insert into login_record values(5,’21:00′,’2021-11-13′); insert into login_record values(6,’22:30′,’2021-11-10′); insert into login_record values(6,’13:30′,’2021-11-14′);

输出: dt dau dau_new total_pay total_pay_new 2021-11-10 4 3 2330 2200 2021-11-11 1 1 500 500 2021-11-12 2 1 1000 200 2021-11-14 1 1 700 700

解题思路

看图

记录下几个用到的知识点:

  • 通过派生表来去重。如果我需要从一个已经去重过的结果集中挑选结果,那就是要用到派生表。需要注意的是既然叫派生表,那么你应该把它当成独立的一张表看。即返回的字段数要大于等于你select的字段数。
  • 聚合函数中的IF。可以在聚合函数里面加IF来计算满足某个条件的数据。需要注意的是如果不满足条件需要返回NULL。因为聚合函数计算的是结果集中”存在“,即非NULL的数据。所以返回0对于聚合函数而言是“存在”,返回NULL才是“不存在”。
  • 左联结+聚合函数。左联结中无法匹配的地方会被填上NULL表示”不存在可匹配的数据“。为什么方便聚合函数的计算原因如上条所述。

其实从输出中反推就行了,一步一步去LEFT JOIN新表+条件判断去筛选结果,最后从左到右逐步得出输出结果。

USE myusers;
########## Begin ##########
SELECT A.dt,COUNT(DISTINCT A.user_id) AS dau,SUM(B.is_new) AS dau_new
,SUM(C.pay_money) AS total_pay
,SUM(IF(B.is_new=1,C.pay_money,NULL)) AS total_pay_new
FROM(SELECT DISTINCT user_id,dt
FROM login_record)A
LEFT JOIN new_user AS B
ON A.user_id=B.user_id
LEFT JOIN user_pay AS C
ON C.user_id=A.user_id AND C.dt=A.dt
GROUP BY A.dt
HAVING SUM(C.pay_money) IS NOT NULL

########## End ##########

This Website © 2023 by White Night is licensed under CC BY-NC-SA 4.0 

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

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

相关文章

Leetcode---370周赛

题目列表 2923. 找到冠军 I 2924. 找到冠军 II 2925. 在树上执行操作以后得到的最大分数 2926. 平衡子序列的最大和 一、找到冠军I 第一题模拟题,简单来说是看每一行(列)是否全是1,当然不包括自己比自己强的情况,需要特判 代码如下 …

python回文日期 并输出下一个ABABBABA型回文日期

题目: 输入: 输入包含一个八位整数N,表示日期 对于所有的测评用例,10000101 ≤N≤89991231,保证N是一个合法日期的8位数表示 输出: 输出两行,每行一个八位数。第一行表示下一个回文日期第二…

任务管理器的正确使用教程

快捷键 Ctrlshiftesc:进入任务管理器 我以Win11举例 如何给XX排序 给XX排序,点击空白处可以选择某项降序排列(可以找到最占用某项资料的程序),再点击空白处可以选择某项升序排列 文件正在使用,如何解决 …

windows系统下查看安卓apk的sha1

1.在apk所在文件夹打开cmd或者powershell 2.输入 certutil -hashfile xxx.apk SHA1 这样就可以了 3.指令格式 certutil -hashfile FileName [HashAlgorithm] certutil -hashfile:原样输入 FileName:文件名 HashAlgorithm:可选项包括&…

简述扫码登录原理及测试要点

扫码登录本质是解决将APP端的用户登录信息(通常是Token)通过扫码的形式安全稳定地同步给Web端。 操作流程: 打开登录页面,展示一个二维码(web);打开APP扫描该二维码后,APP显示确认、取消按钮(app)&#xf…

A Survey on Neural Network Interpretability

A Survey on Neural Network Interpretability----《神经网络可解释性调查》 摘要 随着深度神经网络的巨大成功,人们也越来越担心它们的黑盒性质。可解释性问题影响了人们对深度学习系统的信任。它还与许多伦理问题有关,例如算法歧视。此外,…

野火霸天虎 STM32F407 学习笔记_5 按键输入;位带操作介绍

输入——按键点灯 开发板按键电路如下: 按键未按下接地,按下后为高电平。电容起到消抖作用,软件处理就不需要手动延时消抖了。 编程没啥难度,就是改了一下输入模式。使用 ReadInputDataBits 读取。 //bsp_button.c #include &q…

golang 2018,go 1.19安装Gin

GOPROXYhttps://mirrors.aliyun.com/goproxy/ 一致提示URL不能有点,给我整郁闷了,换了这个地址好了 但是一致提示zip的包问题,最后还是不行又换回七牛 NEWBEE! [GIN-debug] Environment variable PORT is undefined. Using por…

SAE 2.0,让容器化应用开发更简单

云原生容器化应用托管模式的演变 云原生这个概念从提出,到壮大,再到今天的极大普及,始终处于一个不断演进和革新的过程中。云原生体系下应用的托管形态是随着企业应用架构在不断演进的。最早的应用大多是集中式、单体式的,应用通…

多元高斯分布

下面我们来看一下多元高斯分布,叫做 multivariative 高斯分布,也就是目前的情况是向量的形式,也就是说我的 x 它是一个向量,那这个情况下我们的高斯分布应该怎么去表示?我们这里面重点还是来看一下它的一个表示的方法&…

【Linux系统编程十五】:(基础IO2)--重定向实现原理 “Linux下一切皆文件“

【Linux系统编程十五】:重定向原理 与 "Linux下一切皆文件" 一.重定向1.实现原理2.输出重定向3.输入重定向4.补充:简易shell中实现重定向 二."Linux下一切皆文件"1.虚拟文件系统(VFS) 一.重定向 我们首先关闭2号文件描述符&#xff…

HTTP协议 和 HTTPS协议

一、HTTP协议: HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTPP有多个版本,目前…

Read Completion Boundary (RCB)切分规则

Read Completion Boundary(RCB) 切分规则 Read Completion Boundary(RCB) 简介 当Read Completion 包含multi-completions时,RCB 规定了多个Completions地址的align规则。Spec中规定RCB可以是64 Byte或者128 Byte,该值可以在link_control register中得…

什么是观察者模式?用 Python 如何实现 Observer(观察者或发布订阅)对象行为型模式?

什么是观察者模式? 观察者模式(Observer pattern)是一种行为型设计模式,它允许对象之间建立一种一对多的依赖关系,当一个对象的状态发生变化时,其相关依赖对象都会得到通知并自动更新。 在观察者模式中&am…

Leo赠书活动-06期 【强化学习:原理与Python实战】文末送书

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…

CVE-2023-0179-Nftables整型溢出

前言 Netfilter是一个用于Linux操作系统的网络数据包过滤框架,它提供了一种灵活的方式来管理网络数据包的流动。Netfilter允许系统管理员和开发人员控制数据包在Linux内核中的处理方式,以实现网络安全、网络地址转换(Network Address Transl…

MySQL 数据库表格创建、数据插入及获取插入的 ID:Python 教程

创建表格 要在MySQL中创建表格,请使用"CREATE TABLE"语句。 确保在创建连接时定义了数据库的名称。 示例创建一个名为 “customers” 的表格: import mysql.connectormydb mysql.connector.connect(host"localhost",user"…

图文解析 Nacos 配置中心的实现

目录 一、什么是 Nacos 二、配置中心的架构 三、Nacos 使用示例 (一)官方代码示例 (二)Properties 解读 (三)配置项的层级设计 (四)获取配置 (五)注册…

nfs配置

1.NFS介绍 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操 作系统可以共享彼此的文件。 NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文 件系统中,而在本地端的系统中来看&#…

【gltf-pipeline】安装gltf-pipeline 进行文件格式转换

问题 想使用gltf-pipeline进行gltf和glb格式转换。简单记录一下安装过程。 解决 1、安装Node.js Node.js下载路径:https://nodejs.org/en 建议默认设置安装。 添加系统环境变量: 测试安装是否成功: 在cmd.exe中运行: no…