当前位置: 首页 > news >正文

MySQL实战2

主要内容

  1. 回访用户
  2. 如何找到每个人每月消费的最大天数

一.回访用户

1.准备工作

代码如下(示例):
drop database if exists db_1;create database db_1;use db_1;CREATE TABLE tb_visits (user_id INT,date DATE
);INSERT INTO tb_visits (user_id, date)
VALUES(1, current_timestamp() - interval 0 day),(1, current_timestamp() - interval 0 day),(1, current_timestamp() - interval 1 day),(1, current_timestamp() - interval 2 day),(1, current_timestamp() - interval 3 day),(1, current_timestamp() - interval 4 day),(2, current_timestamp() - interval 1 day),(4, current_timestamp() - interval 0 day),(4, current_timestamp() - interval 1 day),(4, current_timestamp() - interval 3 day),(4, current_timestamp() - interval 4 day),(4, current_timestamp() - interval 62 day),(4, current_timestamp() - interval 62 day),(5, current_timestamp() - interval 1 day),(5, current_timestamp() - interval 3 day),(5, current_timestamp() - interval 4 day)
;select * from tb_visits order by user_id, date;

2.目标

  • 说明 :回访用户

  • 返回连续访问该页面最⻓的3个用户,按⻓短的倒序排列3个用户

  • 问题:在如下的数据库表中,包含有关用户访问网页的信息。完成SQL返回连续访问该页面最长的3个用户,按长短的倒序排列3个用户。

  • 输入
    在这里插入图片描述

  • 输出
    在这里插入图片描述

3.实现

代码如下(示例):
-- todo 第一步: 去重
with t1 as (selectdistinct user_id, datefrom tb_visits
),-- todo 第二步: 根据 user_id 分堆, 再根据 date 排序(正序)
t2 as (selectuser_id, date,row_number() over (partition by user_id order by date asc) as rnfrom t1
),-- todo 第三步: 伪代码 dt2 = date -rn
t3 as (selectuser_id, date, rn,date_add(date, interval -rn day) as dt2from t2
),-- todo 第四步: 求每个用戶连续访问的天数, 连续访问的开始日期和结束日期
t4 as (selectuser_id, dt2,count(1) as cnt,-- 连续天数min(date) as start_date,-- 开始日期max(date) as end_date-- 结束日期from t3group by user_id, dt2
),-- todo 第五步: 求每个人访问的最大天数 先排序
t5 as (selectuser_id, dt2, cnt, start_date, end_date,row_number() over (partition by user_id order by cnt desc) as rn2from t4
),-- todo 第六步: 求每个人访问的最大天数 再过滤 ... where rn2=1
t6 as (selectuser_id, dt2, cnt, start_date, end_date, rn2from t5where rn2=1
),-- todo 第七步: 求最大连续天数的top3 先排序
t7 as (selectuser_id, dt2, cnt, start_date, end_date, rn2,rank() over (order by cnt desc) as rn3
from t6
),-- todo 第八步: 求最大连续天数的top3 再过滤
t8 as (select*from t7where rn3<=3
)
select user_id, cnt, start_date, end_date from t8
;

二.如何找到每个人每月消费的最大天数

1.准备工作

代码如下(示例):
drop database if exists db_1;create database db_1;use db_1;create table tb_card
(card_nbr varchar(32),c_date varchar(32),c_type varchar(32),c_atm int
);insert into tb_card
values(1, '2022-01-01', '网购', 150),(1, '2022-01-01', '网购', 100),(1, '2022-01-02', '网购', 200),(1, '2022-01-03', '网购', 300),(1, '2022-01-15', '网购', 100),(1, '2022-01-16', '网购', 200),(2, '2022-01-06', '网购', 500),(2, '2022-01-07', '网购', 800),(1, '2022-02-02', '网购', 200),(1, '2022-02-03', '网购', 300),(1, '2022-02-04', '网购', 300),(1, '2022-02-05', '网购', 300),(1, '2022-02-08', '网购', 800),(1, '2022-02-09', '网购', 900),(2, '2022-02-05', '网购', 500),(2, '2022-02-06', '网购', 500),(2, '2022-02-07', '网购', 800),(2, '2022-02-07', '网购', 850)
;select * from tb_card;

2.目标

  • 说明

  • 有一张C_T (列举了部分数据)表示持卡人消费记录,表结构如下:在这里插入图片描述

  • 每个月每张卡连续消费的最大天数(如卡在当月只有一次消费则为1)。

  • 连续消费天数:指一楼时间内连续每天都有消费,同一天有多笔消费算一天消费,不能跨月份统计。

  • 输入
    在这里插入图片描述

  • 输出
    在这里插入图片描述

3.实现

代码如下(示例):
with t1 as (selectdistinct card_nbr, c_date
from tb_card
),t2 as (selectcard_nbr,substr(c_date, 1, 7) as c_month,
c_date, 
--substr(c_date, 1, 7) as c_month:从消费日期中提取出年份和月份,形成一个新的字段c_month。这样我们就可以按照月份进行分组。row_number() over (partition by card_nbr, substr(c_date, 1, 7) order by
from t1
),
t3 as (selectcard_nbr, c_month, c_date, rn1,date_add(c_date, interval -rn1 day) as dt2from t2
),
t4 as (selectcard_nbr, c_month, dt2,count(1) as cnt -- todo 连续消费的天数from t3group by card_nbr, c_month, dt2
)
selectcard_nbr, c_month,max(cnt) as 连续消费的最大天数
from t4
group by card_nbr, c_month
;

4.解释

代码如下(示例):

以下是每个子查询的解释:1. 子查询t1:从tb_card表中选择不同的卡号和消费日期。2. 子查询t2:从t1中选择卡号、消费月份和消费日期,并使用row_number()函数为每个卡号和月份组合编号。3. 子查询t3:从t2中选择卡号、消费月份、消费日期、编号和消费日期减去编号天数的结果。4. 子查询t4:从t3中选择卡号、消费月份、消费日期和每个日期组合的连续消费天数,并使用count()函数计算连续消费天数。最后,查询语句从t4中选择卡号、消费月份和最大连续消费天数,并使用group by子句按卡号和月份分组。

总结

MySQL实战1
以上是今天要讲的内容,实战了:回访用户,如何找到每个人每月消费的最大天数。

相关文章:

MySQL实战2

文章目录 主要内容一.回访用户1.准备工作代码如下&#xff08;示例&#xff09;: 2.目标3.实现代码如下&#xff08;示例&#xff09;: 二.如何找到每个人每月消费的最大天数1.准备工作代码如下&#xff08;示例&#xff09;: 2.目标3.实现代码如下&#xff08;示例&#xff09…...

【面试经典150 | 栈】简化路径

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;字符串数组模拟栈 其他语言python3 写在最后 Tag 【栈】【字符串】 题目来源 71. 简化路径 题目解读 将 Unix 风格的绝对路径转化成更加简洁的规范路径。字符串中会出现 字母、数字、/、_、. 和 .. 这几种字符&#…...

无线电编码和记录和静音检测器 PlayOutONE LiveStream 5.0

直播编码器&#xff0c;随处流式传输。LiveStream 应用程序的多色图案屏幕截图&#xff0c;显示一波进入&#xff0c;四路流出来&#xff0c;LiveStream是一站式应用程序&#xff0c;可让您的电台在需要的地方输出。 对音频进行编码以进行流式传输&#xff0c;使用您最喜欢的V…...

React中useEffect Hook使用纠错

引言 React是一种流行的JavaScript库&#xff0c;用于构建用户界面。它提供了许多强大的功能和工具&#xff0c;使开发人员能够轻松地构建交互式和可重用的组件。其中一个最常用的功能是React的useEffect Hook&#xff0c;它允许我们在函数组件中执行副作用操作。然而&#xf…...

0049【Edabit ★☆☆☆☆☆】【修改Bug代码】Buggy Code

0049【Edabit ★☆☆☆☆☆】【修改Bug代码】Buggy Code bugs language_fundamentals Instructions The challenge is to try and fix this buggy code, given the inputs true and false. See the examples below for the expected output. Examples has_bugs(true) // &qu…...

javaswing/gui的科学计算器

一个使用javajavaswing/gui的科学计算器程序。 支持加减乘除&#xff0c;函数运算&#xff0c;清空&#xff0c;退回等操作。 还支持进制运算。 源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制...

Chapter1:C++概述

此专栏为移动机器人知识体系的 C {\rm C} C基础&#xff0c;基于《深入浅出 C {\rm C} C》(马晓锐)的笔记&#xff0c; g i t e e {\rm gitee} gitee链接: 移动机器人知识体系. 1.C概述 1.1 C概述 计算机系统分为硬件系统和软件系统。 硬件系统&#xff1a;指组成计算机的电子…...

实战经验分享FastAPI 是什么

FastAPI 是什么&#xff1f;FastAPI实战经验分享 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7e9e23e6fe3444238413d91f37064b65.png](https://fastapi.tiangolo.com/) FastAPI 是一个先进、高效的 Python Web 框架&#xff0c;专门用于构建基于 Python 的 API。它是…...

Edge浏览器中常用的20个快捷键

Microsoft Edge&#xff0c;和许多其他网络浏览器一样&#xff0c;设有一系列的键盘快捷方式&#xff0c;旨在提高用户效率。以下是Edge浏览器的20个实用快捷键&#xff1a; Ctrl T - 打开一个新标签页。Ctrl W&#xff08;或 Ctrl F4&#xff09;- 关闭当前标签页。Ctrl …...

winscp显示隐藏文件

当前目录下有被隐藏的文件时&#xff0c;会在右下角看到 “已隐藏” 的字样&#xff0c;双击这个字样&#xff0c;就会显示被隐藏的文件和文件夹...

uniapp获取地理位置的API是什么?

UniApp获取地理位置的API是uni.getLocation。它的作用是获取用户的当前地理位置信息&#xff0c;包括经纬度、速度、高度等。通过该API&#xff0c;开发者能够实现基于地理位置的功能&#xff0c;如显示用户所在位置附近的商家、导航服务、天气查询等。 以下是一个示例&#x…...

【ARMv8 SIMD和浮点指令编程】NEON 通用数据处理指令——复制、反转、提取、转置...

NEON 通用数据处理指令包括以下指令(不限于): • DUP 将标量复制到向量的所有向量线。 • EXT 提取。 • REV16、REV32、REV64 反转向量中的元素。 • TBL、TBX 向量表查找。 • TRN 向量转置。 • UZP、ZIP 向量交叉存取和反向交叉存取。 1 DUP (element) 将…...

C#,数值计算——分类与推理,基座向量机的 Svmgenkernel的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public abstract class Svmgenkernel { public int m { get; set; } public int kcalls { get; set; } public double[,] ker { get; set; } public double[] y { get; set…...

08.K8S高可用方案

K8S高可用方案 1、高可用部署方式 官方提供两种高可用实现方式: 堆叠etcd 拓扑,其中 etcd 节点与控制平面节点共存;外部 etcd 节点,其中 etcd 与控制平面在不同的节点上运行;1.1、堆叠 etcd 拓扑 主要特点: 每个 master 节点上运行一个 apiserver 和 etcd, etcd 只与本…...

MySQL实战1

文章目录 主要内容一.墨西哥和美国第三高峰1.准备工作代码如下&#xff08;示例&#xff09;: 2.目标3.实现代码如下&#xff08;示例&#xff09;: 4.相似例子代码如下&#xff08;示例&#xff09;: 二.用latest_event查找当前打开的页数1.准备工作代码如下&#xff08;示例&…...

关于A level的习题答案

CAIE考试局&#xff08;也称为CIE&#xff09; 的真题答案有本书叫做《A-level 数学历年真题全解》包含2015-2019的Paper1、Paper3、Paper4、Paper6 Further Mathematica cousebook这本书的最后有Answer但是没有过程 Edexcel考试局 书本末尾有简易答案。 但是具体答案在Sol…...

左神算法题系列:动态规划机器人走路

机器人走路 假设有排成一行的N个位置记为1~N&#xff0c;N一定大于或等于2 开始时机器人在其中的start位置上(start一定是1~N中的一个) 如果机器人来到1位置&#xff0c;那么下一步只能往右来到2位置&#xff1b; 如果机器人来到N位置&#xff0c;那么下一步只能往左来到N-1位…...

LeetCode75——Day19

文章目录 一、题目二、题解 一、题目 724. Find Pivot Index Given an array of integers nums, calculate the pivot index of this array. The pivot index is the index where the sum of all the numbers strictly to the left of the index is equal to the sum of all…...

ToLua使用原生C#List和Dictionary

ToLua是使用原生C#List 介绍Lua中使用原生ListC#调用luaLua中操作打印测试如下 Lua中使用原生DictionaryC#调用luaLua中操作打印测试如下 介绍 当你用ToLua时C#和Lua之间肯定是会互相调用的&#xff0c;那么lua里面使用List和Dictionary肯定是必然的&#xff0c;在C#中可以调用…...

WebDAV之π-Disk派盘 + 言叶

言叶是一个功能丰富的笔记软件,为跨平台而设计,可以为你在手机、电脑和其他设备中实现多端同步。从而实现高效率的记事和办公。支持Markdown的语言和多种计算机语法高亮功能,让你笔记中的内容更加主次分明,可以在这里记录一些代码什么的。同时还可以在笔记中插入图片,使其…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...