mysql 查询实战-变量方式-解答

        对mysql 查询实战-变量方式-题目,进行一个解答。(先看题,先做,再看解答)

1、查询表中⾄少连续三次的数字

1,处理思路

        要计算连续出现的数字,加个前置变量,记录上一个的值,跟当前值做比较,如果相同,则进行累加

SELECT *, @count:=IF(@pre=number,@count+1,1) AS count_num,@pre:=number AS pre 
FROM numbers,(SELECT@count:=0, @pre:=NULL) v;

        统计count_num大于3的数字就好了。

2,进行统计

SELECT DISTINCT number FROM(
SELECT *,@count:=IF(@pre=number,@count+1,1) AS COUNT,@pre:=number AS pre FROM
numbers, (SELECT @count:=0,@pre:=NULL) v
) AS tmp WHERE tmp.count >= 3;

2、查询销售额较昨⽇上升的记录

 

1,处理思路

        要比较昨日上升的,要加个变量,记录昨天的值。用今天的值,跟昨天的值,做一个比较,并做一个标记。

 -- 根据时间排序,现在的值(amount),比昨天的值(@pre)大的 flag设置为为1,否则为0
select *, @flag:=if(ammount>@pre,1,0) as flag, 
@pre:=ammount as pre 
from (select @flag:=0,@pre:=null) as v, sale order by record_date;

        再过来flag=1的数据

2,进行过滤统计

select id,record_date,ammount from
(
select *,@flag:=if(ammount>@pre,1,0) as flag,@pre:=ammount as pre from (select
@flag:=0,@pre:=null) as v, sale order by record_date
) as tmp where flag=1

3、查询投票结果的排名情况

        即第一名、第二名是谁,或者理解为,按倒序排好后,加个序号(区别就是同值的,排名是一样的)。

1,处理思路

        排名,也是要跟前一个值做比较,值一样,排名不变;更小,就加1

-- 与前面一行进行比较,值一样,排名不变;更小,就加1
select name,votes,ranking from(
select *,@ranking:=if(votes=@pre,@ranking,@ranking+1) as ranking,
@pre:=votes as pre
from (select @ranking:=0,@pre:=null
) as v,vote order by votes desc
) as tmp;

        这个排名看起来好奇怪,不符合实际的。两个第二名,下一个就是第四名了。

        需要再做一次调整,比如两个第一后,累加的值就变成2了。因此需要再声明一个变量,用于判断累加的次数。

2,实际情况

-- 先累加相同的值, 然后把值赋值给另外一个变量。 再进行二次判断,如果sumSame的值大于0,就用sumSame。
SELECT *, @same:=IF(votes=@pre, @same+1,0) AS same,  @ranking:=IF(votes=@pre, @ranking, 
@ranking+1+IF(@sumSame > 0, @sumSame,0)) AS ranking,@pre:=votes AS pre, @sumSame:=@same AS sunSame
FROM (SELECT @ranking:=0,@same:=0,@pre:=NULL,@sumSame:=NULL
) AS v,vote ORDER BY votes DESC;

3,进行提取

SELECT id, NAME, votes, ranking  FROM (
SELECT *, @same:=IF(votes=@pre, @same+1,0) AS same,  @ranking:=IF(votes=@pre, @ranking, @ranking+1+IF(@sumSame > 0, @sumSame,0)) AS ranking,@pre:=votes AS pre, @sumSame:=@same AS sunSame
FROM (SELECT @ranking:=0,@same:=0,@pre:=NULL,@sumSame:=NULL
) AS v,vote ORDER BY votes DESC
) AS temp;

        这样就符合实际的情况

4、查询⽹站访问⾼峰期

        目标: 查询网站访问高峰时期,高峰时期定义:至少连续三天访问量>=1000

1,先统计访问量大于1000

select *,@count:=if(visit_sum>=1000,@count+1,0) as count
from visit_summary;

2,用倒序排列,统计数量大于3的

再声明一个变量,用于记录上一条flag值

--连续 用倒序排列, 再声明一个变量,用于记录上一条flag值。SELECT *, @pre:=@flag, @flag:=IF((count_num>=3) AND count_num>0,1,0) AS flag
FROM(
SELECT *, @count:=IF(visit_sum>=1000, @count+1,0) AS count_num 
FROM visit_summary
) AS tmp1 ORDER BY id DESC;

        由结果可以看出,对于小于3的,判断前面一条的flag是否为1,即@pre的值为1

3,对于小于3的,判断前面一条的flag是否为1

-- 小于3的,判断前面一条的flag是否为1。 
SELECT *, @pre:=@flag,
@flag:=IF((count_num>=3 OR @pre=1) AND count_num>0,1,0) AS flag
FROM(
SELECT *,@count:=IF(visit_sum>=1000,@count+1,0) AS count_numFROM visit_summary
) AS tmp ORDER BY id DESC;

        然后再过滤flag值为1的,是符合要求的。

4,进行过滤

select * from(
select *,@flag:=if((count>=3 or @flag=1) and count>0,1,0) as flag
from(select *,@count:=if(visit_sum>=1000,@count+1,0) as count from visit_summary
) as tmp order by id desc
) as tmp where tmp.flag=1 order by tmp.id;

总结:

        上面这些题目,都有进行比较的特点,连续出现多少次,或者跟昨天比有上升,还是排名的情况,都要进行比较,尤其是连续出现多次,排名这种情况,用变量写反而比直接写sql要方便很多。后续有出现要比较的情况,就可以考虑用变量的方式去处理,多尝试!!!

        

        上一篇: 《mysql 查询实战-变量方式-题目》

        下一篇: 《mysql 查询实战1-题目》

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

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

相关文章

如何用C++判断一个系统是16位、32位还是64位?

如何用C判断一个系统是16位、32位还是64位&#xff1f; 方法一&#xff1a;使用指针的sizeof()判断 #include <iostream> using namespace std;int main() {int *p nullptr;if(sizeof(p) 8){cout << "64 bits system" << endl;}else if(sizeof(…

AI大模型日报#0413:谷歌引入“无限注意力”、Picsart AI 开源120秒超长AI视频模型

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: 速递&#xff5c;木头姐 ARK 宣布已投资 OpenAI&#xff01;还将 Anthropic 及 Figure1 等 AI 独角兽一网打尽摘要: ARK已通过其风…

helm upgrade时 报错: another operation (install/upgrade/rollback) is in progress

用helm upgrade的时候&#xff0c;报错Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress 原因可能是之前有一次使用helm upgrade的时候&#xff0c;强制退出了命令(ctrlc) 解决方法: 对于 Helm v3 Helm 3 使用特殊的 Secrets 或 ConfigMap…

MySQL 建表语句详解

目录 基本建表语句 数据类型 列级约束 表级约束 表选项 示例 基本建表语句 CREATE TABLE table_name (column_name1 data_type(size) [column_constraints],column_name2 data_type(size) [column_constraints],...[table_constraints] ) [table_options]; table_name:…

IO流基本流

目录 什么是IO流 IO流的体系 字节流 FileOutputStream FileInputStream 字符集 字符流 FileReader FileWriter 字节流和字符流的使用场景 什么是IO流 内存不能永久化存储,程序停止,数据丢失,所以要添加一个存档功能,存储到硬盘的文件,我们要知道文件在哪里和如何传…

async-validator --- 中文文档

目录 async-validator Install Usage API Validate Rules Type 内置类型 Required Pattern Range Length Enumerable Whitespace Deep Rules 深层规则 defaultField 默认字段 Transform 变换 Messages 提示信息 asyncValidator 异步校验函数 validator 校验函…

【web3技术】什么是 WEB3?

Web3 简介 中心化网络已经帮助数十亿人融入了互联网,并在其上创建了稳定、可靠的基础设施。 与此同时,少数中心化巨头几乎垄断了互联网,甚至可以为所欲为。 Web3 是摆脱这一困境的方案。 不同于科技巨头垄断的传统互联网,Web3 采用去中心化,由所有用户构建、运营和拥有。…

day57 判断子序列 不同的子序列 两个字符串的删除操作 编辑距离

题目1 392 判读子序列 题目链接 392 判断子序列 题意 判断字符串s是否为字符串t的子序列 &#xff08;子序列的相对位置在原字符串中不改变&#xff09; 就是求最长公共子序列的长度与字符串s的长度是否相等 动态规划 1&#xff09;确定dp数组及下标i的含义 dp[i][j]…

城市预约挂号统一平台的实现

目录 一、需求分析 二、界面设计 ​ 三、前端开发 四、代码下载 一.需求分析 二、界面设计 三、前端开发 <!DOCTYPE html> <html lang"zh-ch"> <head><meta charset"UTF-8"><title>基本样式页</title><link rel…

Python中的可哈希与不可哈希对象详解

文章目录 1. 前置知识&#xff1a;哈希是什么2. 可哈希和不可哈希对象的定义2.1可哈希2.2 不可哈希 3. 对象的哈希方法3.1 自定义对象的哈希方法3.2 可哈希性与等价性3.3 哈希值的用途 推荐 在复习可变对象和不可变对象时&#xff0c;学到了这个内容 1. 前置知识&#xff1a;哈…

宜搭无权查询该应用信息,唯一排查码:21081d4e17130865292352743e9ed8

这种问题可能是关联表单出现了问题&#xff0c;当前应用中没有这个表单 所以就出现了应用无权访问的问题

【第二十四篇】使用Burpsuite实现反射、储存、DOM型XSS(靶场实战案例)

目录 反射性XSS储存型XSSDOM XSS反射性XSS 搜索1后,审查元素: 猜测<font>标签中没有进行XSS特殊字符转义,而在<font>标签内,可使用<script>标签: <script>alert(1)</script>储存型XSS 该模块对姓名、电子邮件、网站做过滤处理,但评论处…

深度学习| 交叉熵损失函数(包含代码实现)

前言&#xff1a;因为我深度学习主要用于图像分割&#xff0c;所以交叉熵损失函数主要侧重在图像分割。 交叉熵损失函数 介绍公式交叉熵函数存在什么问题带权重的交叉熵函数代码 介绍 交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09;是深度学习中常用的一种损失函…

基于深度学习的生活垃圾智能分类系统(微信小程序+YOLOv5+训练数据集+开题报告+中期检查+论文)

摘要 本文基于Python技术&#xff0c;搭建了YOLOv5s深度学习模型&#xff0c;并基于该模型研发了微信小程序的垃圾分类应用系统。本项目的主要工作如下&#xff1a; &#xff08;1&#xff09;调研了移动端垃圾分类应用软件动态&#xff0c;并分析其优劣势&#xff1b;分析了深…

【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题

"><--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景:如何解决:同一时刻,连续调用多次CanIf_Transmit / Can_Write API,同时发送不同CANID帧,出现丢帧问题。 目录(共9页精讲,基于评估板: NXP S32K312EVB-Q172,手把手教你S32K3从入门到精通) 实现的架…

LeetCode-热题100:5. 最长回文子串

题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a; s “babad” 输出&#xff1a; “bab” 解释&#xff1a; “aba” 同样是符合题意的答案…

鸿蒙开发学习笔记第一篇--TypeScript基础语法

目录 前言 一、ArkTS 二、基础语法 1.基础类型 1.布尔值 2.数字 3.字符串 4.数组 5.元组 6.枚举 7.unkown 8.void 9.null和undefined 10.联合类型 2.条件语句 1.if语句 1.最简单的if语句 2.if...else语句 3.if...else if....else 语句 2.switch语句 5.函数…

Java 入门教程||Java 关键字

Java 关键字 Java教程 - Java关键字 Java中的关键字完整列表 关键词是其含义由编程语言定义的词。 Java关键字和保留字&#xff1a; abstract class extends implements null strictfp true assert const false import package super try …

二叉排序树的增删改查(java版)

文章目录 1. 基本节点2. 二叉排序树2.1 增加节点2.2 查找&#xff08;就是遍历&#xff09;就一起写了吧2.3 广度优先遍历2.4 删除&#xff08;这个有点意思&#xff09;2.5 测试样例 最后的删除&#xff0c;目前我测试的是正确的 1. 基本节点 TreeNode: class TreeNode{pri…

bugku-web-文件包含2

页面源码 <!-- upload.php --><!doctype html><html><head><meta charset"utf-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…