c mysql使用场景_Mysql 场景

1个SQL题,1个场景题,会有点难度!

SQL题

699e901af112530385dc9137aed9cd8b.png

该SQL题大量涉及到row_number,case when,group by等高级用法,有一定的实用价值,总结出来,供日后参考

Question.1:

分组汇总

给定筛选条件

SELECT

Sales_Month

,Customer_ID

,Amount

FROM

(

SELECT

MONTH(Sales_Date) AS Sales_Month

,Customer_ID

,sum(Amount) AS Amount

FROM

Sales

GROUP BY

Sales_Month, Customer_ID

) AS A

WHERE

A.Amount BETWEEN 2000 AND 10000

Question.2:

全集合保留最大值所在行(针对天做处理)

为月维度下给定序列号(针对月做处理)

Group By + Case When 抽取特定值为一个维度

SELECT

B.Sales_month

,B.Customer_ID

,max( CASE WHEN B.nums = 1 THEN B.item ELSE NULL END ) AS Item1

,max( CASE WHEN B.nums = 2 THEN B.item ELSE NULL END ) AS Item2

,max( CASE WHEN B.nums = 3 THEN B.item ELSE NULL END ) AS Item3

FROM

(

SELECT

A.Sales_month

,A.Customer_ID

,A.item

,row_number() over (PARTITION BY A.Sales_month, A.Customer_ID

ORDER BY A.Sales_Date ) AS nums

FROM

(

SELECT

concat(YEAR (Sales_Date), '-',

MONTH(Sales_Date)) AS Sales_month

,Sales_Date

,Customer_ID

,item

,row_number() over (PARTITION BY Sales_Date, Customer_ID

ORDER BY Amount DESC ) AS nums

FROM

sales

) AS A

WHERE

A.nums = 1

) AS B

GROUP BY

B.Sales_month

,B.Customer_ID

ORDER BY

B.Sales_month

,B.Customer_ID

Question.3:

分别选取两个月的集合,对item分类汇总

连接集合,并计算销售额的差值

输出类别,并根据差值跟定序号

SELECT

row_number() over(ORDER BY A.decrease_num DESC) AS Rank_

,A.Item as Item

,A.decrease_num AS MoM_Decrease

FROM

(

select

L.item

,(L.Amount-R.Amount) as decrease_num

from

(

SELECT

item

,sum(Amount) AS Amount

FROM

sales

WHERE

year(Sales_Date) =2018 and month(Sales_Date)=7

GROUP BY

Item

) AS L

inner join

(

SELECT

item

,sum(Amount) AS Amount

FROM

sales

WHERE

year(Sales_Date) =2018 and month(Sales_Date)=8

GROUP BY

Item

) AS R

ON L.item=R.item

) AS A

ORDER BY

Rank_ ASC

LIMIT 10

Question.4:

连续的表示方式:8月的每一天相对于7月的某一天以+1的方式线性增长,排序也是以+1的方式线性增长,连续情况下两者之间的差值相等,对该差值计数即可知道不同的连续天数

计算日期排序的序号和日期相对于7月31日的差值

针对差值分类汇总,计算连续天数和起始日期

给出连续天数大于等于3的类别

SELECT

D.Customer_ID

,D.running_days

,D.start_date

,D.end_date

FROM

(

SELECT

C.Customer_ID

,C.diff_value

,min( C.Sales_Date ) AS start_date

,max( C.Sales_Date ) AS end_date

,count( 1 ) AS running_days

FROM

(

select

B.Customer_ID

,B.Sales_Date

,B.day_interval

,CONVERT(B.day_rank, SIGNED) as day_rank

,(B.day_interval-CONVERT(B.day_rank,SIGNED)) as diff_value

from

(

SELECT

A.Customer_ID

,A.Sales_Date

,datediff( A.Sales_Date, '2018-07-31' ) AS day_interval

,row_number( ) over(PARTITION BY A.Customer_ID

ORDER BY A.Sales_Date ) AS day_rank

FROM

(

select

distinct Sales_Date,Customer_ID

from

sales

) as A

where

Sales_Date>='2018-08-01'

and Sales_Date<='2018-08-31'

) AS B

) as C

GROUP BY

C.Customer_ID

,C.diff_value

) as D

where

D.running_days>=3

ORDER BY

D.Customer_ID

,D.start_date

场景题

有一个列的数据格式是1,2,500,4以逗号分隔数字,创建函数计算小于100数字的平均值

drop FUNCTION if EXISTS `AVG_answser_intval`;

delimiter $

CREATE DEFINER = CURRENT_USER FUNCTION `AVG_answser_intval`(Str VARCHAR(255))

RETURNS DECIMAL(8,2)

DETERMINISTIC

BEGIN

DECLARE Str_sum DECIMAL(8,2) DEFAULT 0.00;

DECLARE Str_con int DEFAULT 0;

DECLARE tmp_dot int;

DECLARE tmp_dec DECIMAL(8,2);

DECLARE result DECIMAL(8,2) DEFAULT 0.00;

while Str<>'' DO

set tmp_dot=LOCATE(',',Str);

IF tmp_dot<>0 THEN

set tmp_dec =CAST(SUBSTR(Str,1,tmp_dot-1)AS DECIMAL(8,2));

set Str_sum=Str_sum+if(tmp_dec <100,tmp_dec,0.0);

set Str=SUBSTR(Str,tmp_dot+1,LENGTH(Str)-tmp_dot);

set Str_con = Str_con+if(tmp_dec <100,1,0);

ELSE

set tmp_dec =CAST(Str AS DECIMAL(8,2));

set Str_sum=Str_sum+if(tmp_dec<100,tmp_dec,0.0);

set Str='';

set Str_con = Str_con+if(tmp_dec <100,1,0);

END IF;

END while;

set result = IF(Str_con>0,ROUND(Str_sum/Str_con,2),0);

RETURN result;

END$

delimiter ;

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

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

相关文章

以己为壑

2019独角兽企业重金招聘Python工程师标准>>> 今天把软件工程里面关于面向对象的设计学完了,使我对面向对象OOA和OOD的思想有了进一步的认识,各科知识千沟万壑,犬牙交错,的确是这样,能蒙住自己眼的永远是你自己,而不是这个世界,因为美就在那里;裹住自己双足的的永远是…

macos安装vscode_如何使用VSCode进行PostgreSQL开发及调试

Visual Studio Code (VSCode)是一个轻量级但功能强大的源代码编辑器&#xff0c;可在桌面上运行&#xff0c;适用于Windows&#xff0c;macOS和Linux。 它内置了对JavaScript&#xff0c;TypeScript和Node.js的支持&#xff0c;并具有丰富的其他语言(如C&#xff0c;C&#xff…

最小生成树 kruskal_使用Kruskal算法求解Java最小生成树问题

最小生成树 kruskalIn Electronic Circuit we often required less wiring to connect pins together. We can model this wiring problem with a connected, undirected graph G(V, E), where V is the set of pins, E is the set of possible interconnections between pair …

mysql数据库面试题 软件测试_软件测试数据库面试题一

前提本次分享只局限于 sql server 和 mysql 这两种数据库&#xff0c;其他数据库暂不总结正文1. 对查询的字段进行去重(distinct)用法注意&#xff1a;1. distinct【查询字段】&#xff0c;必须放在要查询字段的开头&#xff0c;即放在第一个参数&#xff1b;2. 只能在SELECT 语…

mongoDB 使用手册

2019独角兽企业重金招聘Python工程师标准>>> 1、基本操作db.AddUser(username,password) 添加用户db.auth(usrename,password) 设置数据库连接验证db.cloneDataBase(fromhost) 从目标服务器克隆一个数据库db.commandHelp(name) returns the help for the commanddb.…

android搜索框功能实现_巧用 Trie 树,实现搜索引擎关键词提示功能

来源 | 码海责编 | Carol封图 | CSDN 付费下载于视觉中国我们几乎每天都在用搜索引擎搜索信息&#xff0c;相信大家肯定有注意过这样一个细节:当输入某个字符的时候&#xff0c;搜索引框底下会出现多个推荐词&#xff0c;如下&#xff0c;输入「python」后&#xff0c;底下会出…

qt5.9.0调试如何查看变量的值_深入了解 Java 调试

Bug(俗称"八阿哥") 是软件开发绕不过的一道坎&#xff0c;因此调试便成了每位程序员一项必备的核心技能。调试不仅有助于理解程序的运行流程&#xff0c;还能改进代码质量&#xff0c;最终提高开发者解决问题的能力以及交付软件的品质。本文旨在讨论 Java 调试关键技…

(6) 如何用Apache POI操作Excel文件-----POI-3.10的一个和注解(comment)相关的另外一个bug...

如果POI-3.10往一个工作表&#xff08;sheet&#xff09;里面插入数据的话&#xff0c;需要注意了&#xff0c;其有一个不太被容易发现的bug。 被插入的工作表&#xff08;sheet&#xff09;里面的单元格没有包含任何的注解&#xff08;comment&#xff09;的时候&#xff0c;插…

python导入模块以及类_python模块的导入以及模块简介

标签&#xff1a; 一、模块的定义及类型 1、定义 模块就是用一堆的代码实现了一些功能的代码的集合&#xff0c;通常一个或者多个函数写在一个.py文件里&#xff0c;而如果有些功能实现起来很复杂&#xff0c;那么就需要创建n个.py文件&#xff0c;这n个.py文件的集合就是模块 …

mnist手写数字数据集_mnist手写数据集(1. 加载与可视化)

》》欢迎 点赞&#xff0c;留言&#xff0c;收藏加关注《《1. 模型构建的步骤&#xff1a;在构建AI模型时&#xff0c;一般有以下主要步骤&#xff1a;准备数据、数据预处理、划分数据集、配置模型、训练模型、评估优化、模型应用&#xff0c;如下图所示&#xff1a;【注意】由…

python凯撒密码实现_密码:凯撒密码及其Python实现

python凯撒密码实现Before we start let’s some basic terminology... 在开始之前&#xff0c;让我们先介绍一些基本术语... The art and science to achieve security by encoding messages to make them unreadable are known as Cryptography. That’s what the whole art…

qtextedit 默认文案_QT-纯代码控件-QSplitter(分裂器)

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循CC 4.0 by-sa版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/qq_41488943/article/details/96431379使用Qplitter实现页面的三布局分布1.新建一个无ui界面的工程&…

TYVJ P1030 乳草的入侵 Label:跳马问题

背景 USACO OCT09 6TH描述 Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草。可惜天不从人愿&#xff0c;他在植物大战人类中败下阵来。邪恶的乳草已经在他的农场的西北部份佔领了一片立足之地。草地像往常一样&#xff0c;被分割成一个高度為Y(1 < y < 100)…

s查找mysql服务_MySQL菜鸟实录(一):MySQL服务安装实战

CentOS 7基本信息系统版本&#xff1a; CentOS 7.3 64bit系统配置&#xff1a; 4vCPUs | 8GB磁盘空间&#xff1a;[rootecs-ce5a-0001 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/vda1 40G 17G 22G 44% /devtmpfs 3.9G 0 3.9G 0% /devtmpfs 3.9G 0 3.9G 0% /dev…

实验一 线性表的顺序存储与实现_【自考】数据结构中的线性表,期末不挂科指南,第2篇

线性表这篇博客写的是线性表相关的内容&#xff0c;包括如下部分&#xff0c;先看下有木有期待啥是线性表线性表的顺序存储线性表的基本运算在顺序表上的实现线性表的链式存储线性表的基本运算在单链表上的实现循环链表与双向循环链表Over&#xff0c;内容还蛮多的&#xff01;…

TYVJ P1012 火柴棒等式 Label:枚举

背景 NOIP2008年提高组第二题描述 给你n根火柴棍&#xff0c;你可以拼出多少个形如“ABC”的等式&#xff1f;等式中的A、B、C是用火柴棍拼出的整数&#xff08;若该数非零&#xff0c;则最高位不能是0&#xff09;。用火柴棍拼数字0-9的拼法如图所示&#xff1a;注意&#xff…

python怎么开发软件_怎么使用python进行软件开发

一、下载pyinstaller 我使用的版本为PyInstaller-2.1&#xff0c;支持python版本2.3-2.7&#xff0c;点击这里下载。 二、安装pyinstaller 下载完成后&#xff0c;解压即可。我的解压目录为D:\Python27\PyInstaller-2.1\ 三、使用pyinstaller打包.py成.exe应用程序 1.注意使用前…

28、清华大学脑机接口实验组SSVEP数据集:通过视觉触发BCI[飞一般的赶脚!]

前言&#xff1a; 哈喽&#xff0c;最近对清华大学脑机接口的数据进行了尝试&#xff0c;输入到了DL模型中&#xff0c;以下是本人对于清华BCI数据的个人见解。 数据地址&#xff1a; 清华大学脑机接口研究组 (tsinghua.edu.cn) 打开网站可以看到有很多个数据&#xff0c;官…

python Pexpect

http://www.cnblogs.com/dkblog/archive/2013/03/20/2970738.htmlhttp://www.ibm.com/developerworks/cn/linux/l-cn-pexpect2/index.htmlhttp://www.cnblogs.com/dkblog/archive/2013/03/20/2970738.htmlpython Pexpect Pexpect 是一个用来启动子程序并对其进行自动控制的纯 P…

3dmax镜像后模型线条乱了_3dMax入门教程来啦!小白赶紧收藏!

3D Studio Max&#xff0c;常简称为3d Max或3ds MAX&#xff0c;是Discreet公司开发的&#xff08;后被Autodesk公司合并&#xff09;基于PC系统的三维动画渲染和制作软件&#xff0c; 3dmax软件主要功能有建模&#xff0c;动画&#xff0c;渲染&#xff0c;特效等&#xff0c;…