SQL练习——(15/81)
目录
1.计算次日留存率
2.多条件查询
方法1:子查询
方法2:窗口函数实现
3.条件查询——自连接相关
1.计算次日留存率
550. 游戏玩法分析 IV - 力扣(LeetCode)
错误查询1:(没有考虑从首次登录日期开始至少连续两天登录)
遇到了一个和distinct有关的问题
--查询1
WITH second_login AS (SELECT DISTINCT player_id FROM (SELECT player_id, event_date,LAG(event_date, 1) OVER (PARTITION BY player_id ORDER BY event_date) AS pre_dataFROM activity) AS subqueryWHERE DATEDIFF(event_date, pre_data) = 1
)
SELECT ROUND(COUNT(second_login.player_id) / COUNT(DISTINCT activity.player_id), 2) AS fraction
FROM second_login, activity;--查询2
WITH second_login AS (SELECT player_id FROM (SELECT player_id, event_date,LAG(event_date, 1) OVER (PARTITION BY player_id ORDER BY event_date) AS pre_dataFROM activity) AS subqueryWHERE DATEDIFF(event_date, pre_data) = 1
)
SELECT ROUND(COUNT(DISTINCT second_login.player_id) / COUNT(DISTINCT activity.player_id), 2) AS fraction
FROM second_login, activity;
查询1:
-
second_login
子查询返回的player_id
是唯一的,因为DISTINCT
在内层SELECT
语句中使用。 -
在最终的
SELECT
语句中,COUNT(second_login.player_id)
直接计算所有player_id
的数量,而不会去除重复项。 -
意味着如果
second_login
子查询返回了重复的player_id
,这些重复项不会被去除。
查询2:
-
在最终的
SELECT
语句中,COUNT(DISTINCT second_login.player_id)
确保只计算唯一的player_id
。 -
意味着即使
second_login
子查询返回了重复的player_id
,最终的计数也会去除这些重复项。
感觉按理说两个查询效果应该是一样的,但是2统计的结果是比1少的,问AI也解释不清楚。。。
错误查询2:超出时间限制
with first_login as(select player_id,min(event_date) as first_datafrom activitygroup by player_id
),second_login as(select activity.player_idfrom activityjoin first_login on first_login.player_id=activity.player_idwhere datediff(activity.event_date,first_login.first_data)=1
)
select round(count(distinct second_login.player_id)/count(distinct activity.player_id),2) as fraction
from second_login,activity
-
在最终的
SELECT
语句中,second_login
和activity
表通过笛卡尔积连接,这会导致second_login
表中的每一行与activity
表中的每一行进行比较,从而产生大量的重复计算。 -
这种操作在大数据集上非常耗时,可能导致查询超时。
正确的查询:(写的够呛T^T)
select ifNULL(round(count(distinct secondlogin.player_id)/count(distinct activity.player_id),2),0) as fraction
from (select activity.player_id as player_id from(select player_id,date_add(min(event_date),interval 1 day) as second_datefrom activitygroup by player_id) as expectedlogin,activitywhere activity.event_date=expectedlogin.second_date and activity.player_id=expectedlogin.player_id
) as secondlogin,activity
内部子查询:为每个玩家计算出他们第一次登录的日期加一天的日期(second_date
),即预期的第二次登录日期。
-
min(event_date)
:找到每个玩家的最早登录日期。 -
date_add(min(event_date), interval 1 day)
:将最早登录日期加一天,得到预期的第二次登录日期。 -
group by player_id
:按玩家分组,确保每个玩家只计算一次。
外部子查询:找出实际在预期的第二次登录日期登录的玩家。
-
activity
表与expectedlogin
子查询进行连接,条件是activity.event_date=expectedlogin.second_date
和activity.player_id=expectedlogin.player_id
。 -
这样筛选出的
player_id
就是实际在预期的第二次登录日期登录的玩家。
总结:
-
次日留存率:计算第二天登录的玩家占总玩家的比例。
-
关键步骤:(嵌套子查询)
-
计算每个玩家的预期第二次登录日期。
-
找出实际在预期第二次登录日期登录的玩家。
-
计算次日留存率。
-
-
SQL知识点:
-
子查询
-
COUNT(DISTINCT ...)
-
ROUND(..., 2)
-
IFNULL(..., 0)
-
DATE_ADD(..., INTERVAL 1 DAY)
-
JOIN
操作/where操作
-
2.多条件查询
方法1:子查询
select round(sum(tiv_2016),2) as tiv_2016
from (select tiv_2016 from insurancewhere tiv_2015 in (select tiv_2015from insurancegroup by tiv_2015having count(*) >1)and (lat,lon) in(select lat,lonfrom insurancegroup by lat,lonhaving count(*)=1)
) as subquery
-
子查询1:
SELECT tiv_2015 FROM insurance GROUP BY tiv_2015 HAVING COUNT(*) > 1
:筛选出2015年投保额至少跟一个其他投保人相同的投保额。 -
子查询2:
SELECT lat, lon FROM insurance GROUP BY lat, lon HAVING COUNT(*) = 1
:筛选出所在城市与其他投保人都不同的投保人的(lat, lon)
。 -
主查询:
SELECT tiv_2016 FROM insurance WHERE tiv_2015 IN (...) AND (lat, lon) IN (...)
:筛选出同时满足上述两个条件的投保人的tiv_2016
。
方法2:窗口函数实现
更高效,使用窗口函数可以避免多次扫描表,提高查询效率
with subquery as (select*,sum(1) over (partition by tiv_2015) as same_tiv_2015_num,sum(1) over (partition by concat(lat, '-', lon)) as same_position_numfrom Insurance
)
select round(sum(tiv_2016), 2) as tiv_2016
from subquery
where same_tiv_2015_num > 1 and same_position_num = 1
-
SUM(1) OVER (PARTITION BY tiv_2015)
:-
对每个
tiv_2015
分组,计算每个分组中的记录数。 -
same_tiv_2015_num
表示每个投保人在2015年的投保额与多少其他投保人相同。
-
-
SUM(1) OVER (PARTITION BY CONCAT(lat, '-', lon))
:-
对每个
(lat, lon)
分组,计算每个分组中的记录数。 -
same_position_num
表示每个投保人的位置(纬度和经度)与其他投保人是否相同。 -
使用
CONCAT(lat, '-', lon)
将纬度和经度组合成一个字符串,以便进行分组。
-
3.条件查询——自连接相关
(自连接join、分组统计group、条件过滤having/where)
570. 至少有5名直接下属的经理 - 力扣(LeetCode)
select e2.name
from employee e2
left join employee e1 on e1.managerID = e2.id
group by e2.id
having count(e1.managerID) >=5
577. 员工奖金 - 力扣(LeetCode)
select employee.name,bonus.bonus
from employee
left join bonus on bonus.empId=employee.empId
where bonus.bonus<1000 or bonus.bonus is null
584. 寻找用户推荐人 - 力扣(LeetCode)
SELECT name
FROM customer
-- where referee.id !=2
WHERE referee_id IS NULL OR referee_id != 2;
NULL
不能直接用=
或!=
来比较,必须使用IS NULL
或IS NOT NULL
。
相关文章:
SQL练习——(15/81)
目录 1.计算次日留存率 2.多条件查询 方法1:子查询 方法2:窗口函数实现 3.条件查询——自连接相关 1.计算次日留存率 550. 游戏玩法分析 IV - 力扣(LeetCode) 错误查询1:(没有考虑从首次登录日期开始…...
数据中心 智慧机房解决方案
该文档介绍数据中心智慧机房解决方案,涵盖模块化数据中心(机柜式、微模块),具备低成本快速部署、标准化建设等特点;监控管理系统(DCIM)可实现设施、资产、容量、能效管理;节能解决方案含精密空调节能控制柜,节能率高达 30%;还有7X24 小时云值守运维服务。方案亮点包括…...
网络-MOXA设备基本操作
修改本机IP和网络设备同网段,输入设备IP地址进入登录界面,交换机没有密码,路由器密码为moxa 修改设备IP地址 交换机 路由器 环网 启用Turbo Ring协议:在设备的网络管理界面中,找到环网配置选项,启用Turb…...
Docker构建 Dify 应用定时任务助手
概述 Dify 定时任务管理工具是一个基于 GitHub Actions 的自动化解决方案,用于实现 Dify Workflow 的定时执行和状态监控。无需再为缺乏定时任务支持而感到困扰,本工具可以帮助设置自动执行任务并获取实时通知,优化你的工作效率。 注意&…...
前端测试策略:单元测试到 E2E 测试
引言 在现代前端开发中,测试已成为确保应用质量和可靠性的关键环节。随着前端应用复杂度的不断提高,仅依靠手动测试已经远远不够。一个全面的前端测试策略应该包含多个层次的测试,从最小粒度的单元测试到模拟真实用户行为的端到端(E2E)测试。…...
Web漏洞扫描服务的特点与优势:守护数字时代的安全防线
在数字化浪潮中,Web应用程序的安全性已成为企业业务连续性和用户信任的核心要素。随着网络攻击手段的不断升级,Web漏洞扫描服务作为一种主动防御工具,逐渐成为企业安全体系的标配。本文将从特点与优势两方面,解析其价值与应用场景…...
大中型水闸安全监测系统解决方案
一、系统概述 水闸是重要的水利基础设施,具有防洪、挡潮、排涝、灌溉、供水、生态、航运和水力发电等综合功能,在国家水网构建、支撑经济社会高质量发展等方面具有十分重要的作用。我国水闸工程面广量大,据2021年统计数据,我国已建…...
紫光同创FPGA实现AD9238数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目紫光同创FPGA相关方案推荐我这里已有的以太网方案本方案在Xilinx系列FPGA的应用方案 3、设计思路框架工程设计原理框图AD输入源AD9238数据采集AD9238数据缓存控制模块…...
ffmpeg 把一个视频复制3次
1. 起因, 目的: 前面我写过,使用 python 把一个视频复制3次但是速度太慢了,我想试试看能否改进。而且我想换一种新的视频处理思路,并试试看速度如何。 2. 先看效果 效果就是能行,而且速度也快。 3. 过程: 代码 1…...
仿腾讯会议——添加音频
1、实现开启或关闭音频 2、 定义信号 3、实现开始暂停音频 4、实现信号槽连接 5、回收资源 6、初始化音频视频 7、 完成为每个人创建播放音频的对象 8、发送音频 使用的是对象ba,这样跨线程不会立刻回收,如果使用引用,跨线程会被直接回收掉&a…...
从零训练一个大模型:DeepSeek 的技术路线与实践
从零训练一个大模型:DeepSeek 的技术路线与实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 从零训练一个大模型:DeepSeek 的技术路线与实践摘要引言技术路线对比1. 模型架构:…...
interface接口和defer场景分析
接口 接口这里主要两点: 设计业务结构时采用依赖倒转:业务层向下依赖抽象层,实现层向上依赖抽象层。 相比于之前: 之后: 注意struct中嵌套interface和不嵌套interface的区别: type Myinterface interfac…...
【数据结构篇】排序1(插入排序与选择排序)
注:本文以排升序为例 常见的排序算法: 目录: 一 直接插入排序: 1.1 基本思想: 1.2 代码: 1.3 复杂度: 二 希尔排序(直接插入排序的优化): 2.1 基本思想…...
FastAPI自定义异常处理:优雅转换Pydantic校验错误
FastAPI自定义异常处理:优雅转换Pydantic校验错误 背景需求 当使用FastAPI开发API服务时,Pydantic的自动校验异常默认会返回如下格式的422响应: {"detail": [{"type": "missing","loc": ["body", "user", &…...
C++--内存管理
内存管理 1. C/C内存分布 在C语言阶段,常说局部变量存储在栈区,动态内存中的数据存储在堆区,静态变量存储在静态区(数据段),常量存储在常量区(代码段),其实这里所说的栈…...
YOLOV3 深度解析:目标检测的高效利器
在计算机视觉领域,目标检测一直是一个重要且热门的研究方向,广泛应用于安防监控、自动驾驶、机器人视觉等诸多场景。YOLO(You Only Look Once)系列算法凭借其出色的实时性和较高的检测精度,在目标检测领域占据着重要地…...
select * from 按时间倒序排序
在SQL中,如果你想要根据时间字段来倒序排序查询结果,你可以使用ORDER BY子句,并结合DESC关键字来实现这个目的。这里有几个常见的场景和示例,假设我们有一个表events,里面包含一个时间戳字段event_time。 示例1&#…...
数据结构-DAY06
一、树的概念 1.链表是数的一部分(斜树) 2.树的查找速度很快 3.层序:前序:根左右 中序:左根右 后序: 左右根 4.树的存储:顺序结构,链式结构 5.特点: 1…...
JavaWeb:SpringBoot处理全局异常(RestControllerAdvice)
问题 GlobalExceptionHandler 小结...
免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了
1. 概览 1.1 快速了解 PawSQL PawSQL是专注于数据库性能优化的企业级工具,解决方案覆盖SQL开发、测试、运维的整个流程,提供智能SQL审核、查询重写优化及自动化巡检功能,支持MySQL、PostgreSQL、Oracle、SQL Server等主流数据库及达梦、金仓…...
buuctf RSA之旅
BUUCTF-RSA的成长之路 rsarsaRSA1RSA3RSA2RSARSAROLLDangerous RSA[GUET-CTF2019]BabyRSArsa2RSA5[NCTF2019]childRSA[HDCTF2019]bbbbbbrsaRSA4[BJDCTF2020]rsa_output[BJDCTF2020]RSA[WUSTCTF2020]babyrsa[ACTF新生赛2020]crypto-rsa0[ACTF新生赛2020]crypto-rsa3[GWCTF 2019]…...
javascript 编程基础(2)javascript与Node.js
文章目录 一、Node.js 与 JavaScript1、基本概念1.1、JavaScript:动态脚本语言1.2、Node.js:JavaScript 运行时环境 2、核心区别3、执行环境差异3.1、浏览器中的JavaScript3.2、Node.js中的JavaScript 4、共同点5、为什么需要Node.js? 一、No…...
IDEA+AI 深度融合:重构高效开发的未来模式
在 Java 开发领域,IntelliJ IDEA(以下简称 IDEA)作为最受欢迎的集成开发环境之一,一直是开发者的得力工具。而飞算 JavaAI 凭借强大的人工智能技术,为 Java 开发带来了全新的效率提升可能。当 IDEA 与飞算 JavaAI 深度…...
深度学习中常见损失函数激活函数
损失函数 一、分类任务损失函数 二、回归任务损失函数 三、生成对抗网络(GAN)损失函数 四、其他专用损失函数 五、损失函数选择原则 任务类型:分类用交叉熵,回归用MSE/MAE。 数据分布:类别不平衡时选择Focal Loss或…...
入职软件开发与实施工程师了后........
时隔几个月没有创作的我又回来了,这几个月很忙,我一直在找工作,在自考(顺便还处理了一下分手的事),到处奔波,心力交瘁。可能我骨子里比较傲吧。我不愿意着急谋生,做我不愿意做的普通…...
告别Spring AI!我的Java轻量AI框架实践(支持多模型接入|注解式MCP架构|附开源地址)
~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 1. 开发初衷 \quad 大家好,我是犬余,之前,为了体验一下MCP架构的JAVA实现,犬余使用了Spring AI框…...
【软考-架构】15、软件架构的演化和维护
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 软件架构演化和定义面向对象软件架构演化软件架构演化方式的分类软件架构演化原则软件架构演化评估方法大型网站架构演化软件架构维护 软件架构演化和定义 软件架构生命周…...
编译Qt5.15.16并启用pdf模块
编译Qt5.15.16并启用pdf模块 标题1.目录设置 -q-bulid –qt-everywhere-src-5.15.16 –bulid cd bulid 必须,否则会提示Project ERROR: You cannot configure qt separately within a top-level build. create .qmake.stash and .qmake.super in build folder …...
spring中的EnvironmentPostProcessor接口详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 EnvironmentPostProcessor 是 Spring Boot 提供的一个关键扩展接口,允许开发者在 Spring 应用环境初始化后、应用上下文创建前&…...
自学嵌入式 day20-数据结构 链表
注:gdb调试工具用法 3.链表的常规操作 (6)尾部插入 int InsertTailLinkList(LinkList* ll, DATATYPE* data) { if (IsEmptyLinkList(ll))//判断链表是否为空 { return InsertHeadLinkList(ll, data); } else { …...
Java设计模式之外观模式:从入门到精通(保姆级教程)
外观模式是结构型设计模式中非常实用的一种,它为复杂的子系统提供了一个统一的简化接口。本文将全面深入地剖析外观模式,从基础概念到高级应用,通过丰富的代码示例、图表和日常生活类比,帮助您彻底掌握这一模式。 一、外观模式基础概念 1.1 什么是外观模式? 外观模式(…...
Ubuntu 20.04 postgresql
安装命令 $ sudo apt-get update $ sudo apt-get install -y postgresql查看postgresql版本 $ psql --version psql (PostgreSQL) 12.22 (Ubuntu 12.22-0ubuntu0.20.04.3)查看系统用户组是否存在postgres $ getent group postgres postgres:x:115: $ getent passwd postgres…...
游戏引擎学习第295天:堆叠房间用于Z层调试
关于确定哪些系统影响许多其他系统,并尽早将其固定下来 目前我们的游戏开发已经进入了一个关键阶段,我们觉得是时候来彻底解决 Z(深度)相关的问题了。之前我们在 Z 轴的处理上做了一些尝试,但始终没有一个明确的定论&…...
【Python 算法零基础 4.排序 ② 冒泡排序】
目录 一、引言 二、算法思想 三、时间复杂度和空间复杂度 1.时间复杂度 2.空间复杂度 四、冒泡排序的优缺点 1.算法的优点 2.算法的缺点 五、实战练习 88. 合并两个有序数组 算法与思路 ① 合并数组 ② 冒泡排序 2148. 元素计数 算法与思路 ① 排序 ② 初始化计数器 ③ 遍历数组…...
【工具】Windows|外接的显示器怎么用软件调亮度(Brightness Slider)
文章目录 工具安装及使用Twinkle Tray:Brightness Slider补充背景知识1. DDC/CI(Display Data Channel Command Interface)2. WMI(Windows Management Instrumentation)3. Twinkle Tray如何结合两者?对比总…...
1.3.3 数据共享、汇聚和使用中的安全目标
探索数据共享、汇聚与使用中的安全目标 在当今数字化时代,数据的价值愈发凸显,数据共享、汇聚与使用成为了推动业务发展、促进创新的重要环节。然而,在这一过程中,数据安全至关重要,我们需要明确并保障保密性、完整性…...
【QT】类A和类B共用类C
当类A和类B需要操作同一个输入框时,需要采用共享实例的设计模式。以下是具体实现方案: 1. 核心实现思路 #mermaid-svg-cdmYFhkgOZ5C0uI5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cdmYF…...
《算法导论(第4版)》阅读笔记:p86-p90
《算法导论(第4版)》学习第 19 天,p83-p85 总结,总计 3 页。 一、技术总结 无。 二、英语总结(生词:2) 1. inkling (1)inkling: inclen(“utter in an undertone,低声说话”) c. a hint(提示);a slight knowledg…...
AI在网络安全中的应用之钓鱼邮件检测
0x01 前言 为什么写这个呢,源自于我之前在某教培网站留了信息,不出意外的个人信息泄露的飞快,邮箱开始疯狂收到垃圾邮件甚至钓鱼邮件,看着每天的拦截消息,就在想这个拦截机制挺好玩的,拦截器是怎么知道是不…...
游戏引擎学习第294天:增加手套
准备战斗 我们正在进行的是第294天的开发,目前暂时没有特别确定要做的内容,但我们决定继续研究移动模式相关的部分。虽然一些小型实体系统已经在运行,但并不确定最终效果如何。 今天我们决定实现一个全新的功能:战斗系统。这是游…...
[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十)
[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十) 一、痛点 你是否经历过这些场景? 数据库字段频繁变更,维护文档耗时费力用Excel维护表结构,版本混乱难以追溯手动编写Word文档&#…...
5个开源MCP服务器:扩展AI助手能力,高效处理日常工作
AI大语言模型(如Claude、GPT)尽管强大,但其原生形态仅限于文本对话,无法直接与外部世界交互。这一局限严重制约了AI在实际应用场景中的价值发挥 - 无法主动获取实时数据、无法操作外部系统、无法访问用户私有资源。 MCPÿ…...
服务器的基础知识
什么是服务器 配置牛、运行稳、价格感人的高级计算机,家用电脑不能比拟的。 服务器的组成:电源、raid卡、网卡、内存、cpu、主板、风扇、硬盘。 服务器的分类 按计算能力分类 超级计算机 小型机AIX x86服务器(服务器cpu架构) …...
bisheng系列(二)- 本地部署(前后端)
一、导读 环境:Ubuntu 24.04、open Euler 23.03、Windows 11、WSL 2、Python 3.10 、bisheng 1.1.1 背景:需要bisheng二开商用,故而此处进行本地部署,便于后期调试开发 时间:20250519 说明:bisheng前后…...
华为ODgolang后端一面面经
MySQL死锁是怎么产生的? 假如有一条SQL语句执行了非常久,你会怎么优化呢? explain 索引什么情况下会失效? InnoDB和MyISAM引擎的区别是什么? 为什么是三次握手 避免历史连接 同步双方初始序列号避免资源浪费 为什么…...
UE5 GAS框架解析内部数据处理机制——服务器与客户端
当, gas通过点击鼠标光标触发事件时,内部的处理机制。 当通过点击事件,命中中目标时, 可获取到对应的TargetData 目标数据。处理相应的操作。 仅有本地的客户端的情况下。命中并不会有什么异常。 当存在服务器时, 服…...
《打造第二大脑》
序 第二大脑,前景无限 2025/05/08 发表想法 是的说的太对了,关键是之前自己一直在找如何能避免出现此问题的方法,今天终于看到了本书所讲的的内容 原文:我们耗费了无数的时间阅读、倾听和观摩他人提供的处世原则、思考方式以及生活…...
Word2Vec详解
目录 Word2Vec 一、Word2Vec 模型架构 (一)Word2Vec 的核心理念 (二)Word2Vec 的两种架构 (三)负采样与层次 Softmax (四)Word2Vec 的优势与局限 二、Word2Vec 预训练及数据集…...
[特殊字符] Word2Vec:将词映射到高维空间,它到底能解决什么问题?
一、在 Word2Vec 之前,我们怎么处理语言? 在 Word2Vec 出现之前,自然语言处理更多是“工程方法”,例如字符串匹配、关键词提取、正则规则...。但这些表示通常缺乏语义,词与词之间看不出任何联系以及非常浅显。当然,技术没有好坏,只有适合的场景。例如: 关键词匹配非常…...
anythingLLM支持本地大模型嵌入知识库后进行api调用
anythingLLM 可以使用本地大模型,并且可以嵌入知识库(Knowledge Base),通过 API 调用该知识库。 ✅ 一、anythingLLM 的基本架构 anythingLLM 是一个支持多种本地大模型(如 LLaMA、Qwen、ChatGLM 等)的开…...