SQL数据库刷题sql_day34(移动平均值、累计求和)

描述 移动平均值

1.求不同产品 每个月以及截至当前月最近3个月的平均销售额

2.求不同产品截至当前月份的累计销售额

数据准备

mysql

CREATE TABLE sales_monthly (product VARCHAR(20),ym VARCHAR(10),amount DECIMAL(10,2)
);-- 插入测试数据
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201801', 10159.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201802', 10211.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201803', 10247.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201804', 10376.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201805', 10400.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201806', 10565.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201807', 10613.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201808', 10696.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201809', 10751.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201810', 10842.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201811', 10900.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201812', 10972.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201901', 11155.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201902', 11202.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201903', 11260.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201904', 11341.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201905', 11459.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('苹果', '201906', 11560.00);INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201801', 10138.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201802', 10194.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201803', 10328.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201804', 10322.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201805', 10481.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201806', 10502.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201807', 10589.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201808', 10681.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201809', 10798.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201810', 10829.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201811', 10913.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201812', 11056.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201901', 11161.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201902', 11173.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201903', 11288.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201904', 11408.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201905', 11469.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('香蕉', '201906', 11528.00);INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201801', 10154.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201802', 10183.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201803', 10245.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201804', 10325.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201805', 10465.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201806', 10505.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201807', 10578.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201808', 10680.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201809', 10788.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201810', 10838.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201811', 10942.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201812', 10988.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201901', 11099.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201902', 11181.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201903', 11302.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201904', 11327.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201905', 11423.00);
INSERT INTO sales_monthly (product, ym, amount) VALUES ('桔子', '201906', 11524.00);

pandas

import pandas as pd# 创建模拟数据
data = {'product': ['苹果']*18 + ['香蕉']*18 + ['桔子']*18,'ym': ['201801', '201802', '201803', '201804', '201805', '201806', '201807', '201808', '201809', '201810', '201811', '201812','201901', '201902', '201903', '201904', '201905', '201906','201801', '201802', '201803', '201804', '201805', '201806', '201807', '201808', '201809', '201810', '201811', '201812','201901', '201902', '201903', '201904', '201905', '201906','201801', '201802', '201803', '201804', '201805', '201806', '201807', '201808', '201809', '201810', '201811', '201812','201901', '201902', '201903', '201904', '201905', '201906'],'amount': [10159.00, 10211.00, 10247.00, 10376.00, 10400.00, 10565.00, 10613.00, 10696.00, 10751.00, 10842.00, 10900.00, 10972.00,11155.00, 11202.00, 11260.00, 11341.00, 11459.00, 11560.00,10138.00, 10194.00, 10328.00, 10322.00, 10481.00, 10502.00, 10589.00, 10681.00, 10798.00, 10829.00, 10913.00, 11056.00,11161.00, 11173.00, 11288.00, 11408.00, 11469.00, 11528.00,10154.00, 10183.00, 10245.00, 10325.00, 10465.00, 10505.00, 10578.00, 10680.00, 10788.00, 10838.00, 10942.00, 10988.00,11099.00, 11181.00, 11302.00, 11327.00, 11423.00, 11524.00]
}df = pd.DataFrame(data)

分析

三个窗口函数 实现三个功能

  • 第一个 
    avg(amount) over(partition by product order by ym rows between 2 preceding and current row)  

        根据product分组根据ym求平均 范围是前两行到当前行

  • 第二个
    avg(amount) over(partition by product order by ym rows unbounded preceding) 

        根据product、ym分组 求截止到当月的平均金额

  •  第三个
    sum(amount) over(partition by product order by ym rows between unbounded preceding and current row )

        根据product分组 求截止到当月的总金额

代码

select product,amount,ym,avg(amount) over(partition by product order by ym rows between 2 preceding and current row )r1,avg(amount) over(partition by product order by ym rows unbounded preceding) r2,sum(amount) over(partition by product order by ym rows between unbounded preceding and current row ) r3
from sales_monthly

df['count'] =df.groupby(by='product')['amount'].cumcount()
df['avg1'] = df.groupby('product').apply(lambda x: x['amount'].rolling(3, min_periods=1).mean()).reset_index(level=0, drop=True)df['sum'] = df.groupby('product')['amount'].cumsum()
df['avg2'] = df['sum']/(df['count']+1)
print(df)

总结

rows 是根据该行的上下行划定范围的 

range是根据该行的值的邻近值划定范围(所以注意格式)

②pandas里的cumsum函数的积累 求累计和

pands求近三行数据用rolling(window=3,min_periods=1)

  • window:指定窗口的大小,即参与计算的连续数据点的数量。
  • min_periods:指定窗口中至少需要有多少个非缺失值数据点才进行计算,默认为None,表示窗口大小的所有数据点都必须存在才进行计算。
  • center:如果为True,则将窗口的标签设置为居中在当前位置。默认是窗口的右边界与当前位置对齐。
  • win_type:指定窗口的类型,可以是各种加权窗口函数,如矩形窗、三角窗等。默认为None,表示使用等权重的矩形窗。

描述

查找短期之内(5天)累计转账超过100万元的账户

数据准备

CREATE TABLE transfer_log (log_id    int, -- 交易日志编号log_ts    TIMESTAMP NOT NULL, -- 交易时间from_user VARCHAR(50) NOT NULL, -- 交易发起账号to_user   VARCHAR(50), -- 交易接收账号type      VARCHAR(10) NOT NULL, -- 交易类型amount    float NOT NULL -- 交易金额(元),保留两位小数
);-- 插入测试数据
INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (1, '2021-01-02 10:31:40',  '62221234567890', NULL, '存款', 50000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (2, '2021-01-02 10:32:15', '62221234567890', NULL, '存款', 100000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (3, '2021-01-03 08:14:29',  '62221234567890', '62226666666666', '转账', 200000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (4, '2021-01-05 13:55:38',  '62221234567890', '62226666666666', '转账', 150000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (5, '2021-01-07 20:00:31',  '62221234567890', '62227777777777', '转账', 300000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (6, '2021-01-09 17:28:07',  '62221234567890', '62227777777777', '转账', 500000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (7, '2021-01-10 07:46:02',  '62221234567890', '62227777777777', '转账', 100000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (8, '2021-01-11 09:36:53',  '62221234567890', NULL, '存款', 40000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (9, '2021-01-12 07:10:01',  '62221234567890', '62228888888881', '转账', 10000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (10, '2021-01-12 07:11:12',  '62221234567890', '62228888888882', '转账', 8000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (11, '2021-01-12 07:12:36',  '62221234567890', '62228888888883', '转账', 5000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (12, '2021-01-12 07:13:55',  '62221234567890', '62228888888884', '转账', 6000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (13, '2021-01-12 07:14:24',  '62221234567890', '62228888888885', '转账', 7000);INSERT INTO transfer_log (log_id, log_ts, from_user, to_user, type, amount)
VALUES (14, '2021-01-21 12:11:16',  '62221234567890', '62228888888885', '转账', 70000);

分析

通过sum(amount) over (partition by from_user order by log_ts range interval 5 day preceding)即可求出最近五天的总额

代码

 with t1 as (select *,sum(amount) over (partition by from_user order by log_ts range interval 5 day preceding) r2from transfer_logwhere type = '转账')select *from t1where r2 > 1000000;

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

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

相关文章

厨房老鼠数据集:掀起餐饮卫生监测的科技浪潮

厨房老鼠数据集:掀起餐饮卫生监测的科技浪潮 摘要:本文深入探讨了厨房老鼠数据集在餐饮行业卫生管理中的重要性及其相关技术应用。厨房老鼠数据集通过收集夜间厨房图像、老鼠标注信息以及环境数据,为深度学习模型提供了丰富的训练样本。基于…

目前我国网络安全人才市场状况

网络安全人才市场状况 本章以智联招聘多年来形成的丰富的招聘、求职信息大数据为基础,结合了奇安信集团 在网络安全领域多年来的专业研究经验,相关研究成果具有很强的代表性。对涉及安全人才 的全平台招聘需求与求职简历进行分析(注&#xf…

Ajax(web笔记)

文章目录 1.Ajax的概念2.Ajax 的作用3.原生Ajax4.Axios4.1Axios的概念4.2Axios入门 1.Ajax的概念 AsynchronousJavaScriptAndXML,异步的JavaScript和XML 2.Ajax 的作用 数据交换:过Ajax可以给服务器发送请求,并获取服务器响应的数据。异步交互:可以在…

小猿口算辅助工具(nodejs版)

github 地址:https://github.com/pbstar/xyks-helper 实现原理 通过屏幕截图截取到题目区域的两个数字,然后通过 ocr 识别出数字,最后通过计算得出答案,并通过模拟鼠标绘制答案。 依赖插件 node-screenshots:屏幕截…

ai搜索工具免费的有那些?这几年搜索都发生了哪些变化?

前言这几年大家的搜索都发生了哪些变化? 要说疯狂的就属于AI工具了,以前搜索内容有广告自己只能眼巴巴的看着,现在不少人的搜索行为都有所变化,经过自己测试也给大家推荐一些自己使用的AI搜索工具毕竟免费。AI对传统搜索影响在传…

linux 虚拟环境下源码安装DeepSpeed

第一步:创建虚拟环境: conda create -n deepspeed python3.10 第二步:进入虚拟环境,安装Pytorch 2.3.1 # CUDA 12.1 conda install pytorch2.3.1 torchvision0.18.1 torchaudio2.3.1 pytorch-cuda12.1 -c pytorch -c nvidia 第…

测试教程分享

前几年在腾讯课堂上发布了不少课程,后来腾讯课堂改革,要收会员费,课程还要抽提程,这么下来就相当于白干了。就放弃了在上面发课程,再后来腾讯课堂就关闭了,以前发布的视频就没有地方发了,于是我…

Android MQTT调试助手开发

在Android开发中,与远程服务器进行通信是一个常见的需求。MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,广泛应用于物联网(IoT)场景中。在阿里云物联网平台…

张雪峰谈网络安全专业前景广阔,现状惨不忍睹

张雪峰在谈论网络安全专业时,主要强调了该专业的就业前景、适应岗位、以及部分高校在此领域的优势。以下是他的观点归纳: 张雪峰对网络安全专业的观点 就业前景广阔 网络空间安全专业的就业前景非常广阔。随着信息时代的到来,各类企业和组织…

Q2=17.8和w=0.6198情况

(个人学习笔记,仅供参考) import numpy as np from scipy.special import kv, erfc from scipy.integrate import dblquad import matplotlib.pyplot as plt import scipy.integrate as spiw 0.6198 g0_sq 21.5989 rho 0.782908 Q2 17.8…

KubeSphere v4 安装指南

日前,KubeSphere v4 发布,相较于之前的版本,新版本在架构上有了颠覆性的变化。为了让社区的各位小伙伴能够丝滑的从旧版本过渡到新版本,我们特别推出本篇安装指南文章,以供参考。 关于 KubeSphere v4 的介绍&#xff…

一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景

文章目录 一、常用数据库概览1.1 关系型数据库1.2 非关系型数据库1.2.1 KV数据库1.2.2 文档型数据库1.2.3 列式存储数据库1.2.4 图数据库 1.3 SQL与NoSQL区别1.3.1 结构化与非结构化1.3.2 关联和非关联1.3.3 查询方式1.3.4 事务1.3.5 总结 二、MySQL三、PostgreSQL3.1 特点、适…

基本计算器 II

文章目录 题目解析解题小结 题目解析 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意:不允许使用任何将字符…

应急实战(10):Linux后门帐号

目录 1. Prepare 1.1 部署安全设备 2. Detect 2.1 设备产生告警 3. Contain 4. Eradicate 4.1 删除后门帐号 4.2 加固弱口令帐号 5. Recover 5.1 恢复帐号登录 6. Follow-Up 6.1 修改登录端口 6.2 开启命令记录 1. Prepare 1.1 部署安全设备 部署主机安全产品:牧云H…

Openlayer实现矢量图层点击高亮

概述 本文主要介绍如何在 Openlayers 矢量图层上实现点击高亮效果。 效果演示 具体实现 数据准备 矢量数据可点击下载 加载矢量图层 矢量数据是通过调用Openlayers的new GeoJSON()实例去加载读取。 let style = new Style({fill: new Fill({color: "rgba(255, 255,…

SldWorks问题 2. 矩阵相关接口使用上的失误

问题 在计算三维点在图纸(DrawingDoc)中的位置时,就是算不对,明明就4、5行代码,怎么看都是很“哇塞”的,毫无问题的。 但结果就是不对。 那就调试一下吧,调试后发现生成的矩阵很不对劲&#…

MySQL启动失败解决方案

目录 引言 一、查看/启动mysql服务的两种方式 方法一: 方法二: 二、修改mysql服务启动路径的地址 三、"my.ini"文件的使用 设置my.ini文件的路径 给出一个使用my.ini文件的小例子 引言 造成启动闪退\失败的原因我仅仅以个人查询的一下博…

社招高频面试题

1.单例模式 面试突击50:单例模式有几种写法? 2.Mybatis缓存机制 MyBatis的一、二级缓存查询关系 一级缓存是SqlSession级别,不能跨SqlSession共享,默认开启。 二级缓存是基于mapper namespace级别的,可以跨SqlSessi…

如何从零开始做自动化测试?

自动化测试是使用软件工具在应用程序上自动运行测试的过程,无需任何人为干预。这可以通过减少手动测试的需要来保存时间并提高软件开发过程的效率。由于人为错误或不一致性,手动测试可能容易出错,这可能导致错误未被检测到。自动化测试通过提…

Flutter SVG 图片加载速度提升 98% 的技巧

Flutter SVG 图片加载速度提升 98% 的技巧 视频 https://youtu.be/0HYtX5c6oOw https://www.bilibili.com/video/BV14ixXeJEKy/ 前言 原文 Flutter SVG 图片加载速度提升 98% 的技巧 作为许多 Flutter 开发者中的一员,我最初在项目中依赖 flutter_svg 包来显示 S…