SQL面试真题解答 数据统计分析,求“同比、环比”等(SQL窗口函数使用)

SQL面试真题解答 数据统计分析,求"同比、环比"等(SQL窗口函数使用)

环比、环比增长率、同比、同比增长率,根据百度百科上的 说明:

环比增长率 环比增长率,一般是指和上期相比较的增长率。 环比增长率=(本期的某个指标的值-上一期这个指标的值)/上一期这个指标的值*100%。 例如,今年5月与今年4月比较。环比更侧重于体现数的短期变化,能够反映出最新趋势和动态。

同比增长率 某个指标的同期比=(当年的某个指标的值-上年同期这个指标的值)/上年同期这个指标的值 即:同比增长率=(当年的指标值-上年同期的值)÷上年同期的值*100%。例如,今年5月与去年5月相比较。同比能够反映出长期的趋势和周期性变化。

解题思路:

保证数据完整,每年每月数据不缺失。

01.将数据抽取年份,月份字段,按照年月聚合求总数。

02.利用SQl窗口函数 LAG() 或者 LEAD() 获取前后数据。

03.与昨日比较:按照"日期"排序,取昨日数据。

04.环比:本月与上月比较,按照"月份"排序,取上一个月份数据。

05.同比:今年本月与去年本月比较,将数据按照"月份"分组,按照"年份"排序,取上一个年份数据。

本SQL示例:

未按照月份聚合求和,仍是按照每天查询。 对比昨天,对比上月同一天,对比上年同一天。

考题扩展延伸:

与十天前对比,与三个月前对比,与六个月前对比,与九个月前对比,与三年前对比,与五年前对比。都可以将数据抽取年月日(或者在设计数据库时候,定义年月日字段),使用窗口函数,实现单表查询,做数据分析。

复制代码
SELECT 	
    eqm_num,
    product_month,
    product_date,
    yyyy,
    mm,
    dd,
    today_all,
    today_ng,
    /*yesterday : 昨天*/
    yesterday_date,
    LAG(product_date,1)OVER(PARTITION BY  eqm_num ORDER BY product_date) AS yesterday,
    LAG(today_all,1)OVER(PARTITION BY  eqm_num ORDER BY product_date) AS yesterday_all,
    /*mm : 上个月*/
    last_month_date,
    LAG(product_date,1)OVER(PARTITION BY eqm_num, yyyy, dd ORDER BY mm) AS mm_day,
    LAG(today_all,1)OVER(PARTITION BY  eqm_num,yyyy, dd ORDER BY mm) AS mm_day_all,
    /*yyyy : 上一年*/
    last_year_date,
    LAG(product_date,1)OVER(PARTITION BY eqm_num, mm, dd ORDER BY yyyy) AS yyyy_day,
    LAG(today_all,1)OVER(PARTITION BY eqm_num, mm, dd ORDER BY yyyy) AS yyyy_day_all
FROM (
    /**/
    SELECT 
        product_month,
        product_date,
        DATEADD(YEAR, -1, product_date) AS last_year_date,
        DATEADD(MONTH, -1, product_date) AS last_month_date,
        DATEADD(DAY, -1, product_date) AS yesterday_date,
        YEAR(product_date) AS yyyy,
        MONTH(product_date) AS mm,
        DAY(product_date) AS dd,
        eqm_num,
        today_all,
        today_ng,
        deleted
    FROM dbo.tbl_daily
    WHERE deleted = 0
    /**/
)AS aa
WHERE deleted = 0
ORDER BY 
    eqm_num,
    product_date
相关推荐
勿忘,瞬间5 分钟前
Mybatis高阶
java·数据库·mybatis
运维行者_39 分钟前
ISP 企业级带宽计费怎么做?网络流量计费的 6 大核心能力
运维·服务器·网络·数据库·支持向量机·接口隔离原则
奇树谦44 分钟前
PCB生产制造全流程详解:从开料、钻孔、沉铜到检测、包装
网络·数据库·制造
驾驭人生1 小时前
Hangfire.Redis.StackExchange 已归档停更!生产任务卡死、重复执行、网络抖动问题解决方案
数据库·redis·缓存
xierui1231231 小时前
Agent记忆不是聊天记录:用三层存储构建可追溯的 AI 工作流
数据库·人工智能·aigc·软件工程
quantdash_cc1 小时前
Python 股票 K 线数据质量校验:字段、缺失值、重复行和价格异常
开发语言·python·数据分析·量化交易·股票数据·quantdash
2301_800074211 小时前
mysql DQL
数据库·sql·mysql
西风未眠2 小时前
ClickHouse数据库引擎引起的数据丢失
数据库·clickhouse·故障
海浪仙人掌2 小时前
应收账款分析如何操作?应收账款分析有哪些注意事项?
数据库·人工智能
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索