当前位置: 首页 > news >正文

MySQL表达式之公用表表达式(CTE)的使用示例

示例一

数据表中有每个企业每年每月并且每月的产值是累加的数据的数据记录

  • 需求:

统计企业产值能力,找出所有家企业中产值最高的企业,其产值记为P。对于第i家企业,其产值为Pi则该企业的产值能力评分=Pi/P×100。

  • SQL:
--        使用ROW_NUMBER()为每个企业每年每个月的产值排名,筛选出每个企业每年最大月份的产值。WITH MaxMonthlyOutput AS (SELECT company_id,declare_year,declare_month,total_industrial_value,ROW_NUMBER() OVER (PARTITION BY company_id, declare_year ORDER BY declare_month DESC) as rnFROM company_revenue_info),
--             从MaxMonthlyOutput中筛选出每个企业每年最大月份的产值。MaxYearlyOutput AS (SELECT company_id,declare_year,total_industrial_valueFROM MaxMonthlyOutputWHERE rn = 1),
--             计算每个企业每年的最大月份产值的总和,得到Pi。SumYearlyOutput AS (SELECT company_id,SUM(total_industrial_value) as PiFROM MaxYearlyOutputGROUP BY company_id),
--              找出所有企业的Pi中的最大值,记为P。MaxPi AS (SELECT MAX(Pi) as PFROM SumYearlyOutput)
--            计算每个企业的得分,公式为Pi/P*100。SELECT syo.company_id         AS companyId,syo.Pi                 AS perValue,mpa.P                  AS standardValue,(syo.Pi / mpa.P * 100) AS scoreFROM SumYearlyOutput syoCROSS JOINMaxPi mpa;
  • MySQL5兼容语法
SELECT s.company_id AS companyId,COALESCE(s.Pi, 0) AS perValue,  -- 空值转0COALESCE(m.P, 1) AS standardValue,  -- 防止除零错误ROUND((COALESCE(s.Pi, 0) / NULLIF(COALESCE(m.P, 1), 0) * 100), 4) AS score
FROM (SELECT company_id,COALESCE(SUM(total_industrial_value), 0) AS Pi  -- 子查询空值处理FROM (SELECT r.company_id, r.total_industrial_valueFROM company_revenue_info rINNER JOIN (SELECT company_id, declare_year, MAX(declare_month) AS max_monthFROM company_revenue_infoGROUP BY company_id, declare_year) mON r.company_id = m.company_id AND r.declare_year = m.declare_year AND r.declare_month = m.max_month) subGROUP BY company_id) s
CROSS JOIN (SELECT COALESCE(MAX(Pi), 1) AS P  -- 确保标准值不为NULLFROM (SELECT COALESCE(SUM(total_industrial_value), 0) AS PiFROM (SELECT r.company_id, r.total_industrial_valueFROM company_revenue_info rINNER JOIN (SELECT company_id, declare_year, MAX(declare_month) 

相关文章:

  • Windows与CasaOS跨平台文件同步:SyncThing本地部署与同步配置流程
  • springboot2.x升级到3.x 惨痛经验总结
  • 告别 “幻觉” 回答:RAG 中知识库与生成模型的 7 种对齐策略
  • 力扣-hot100(找到字符串中的所有字母异位词)
  • Chromium 134 编译指南 Ubuntu篇:依赖同步与Hooks配置(六)
  • python打印颜色(python颜色、python print颜色、python打印彩色文字、python print彩色、python彩色文字)
  • vue项目前后端分离设计
  • MyBatisPlus文档
  • 大模型时代的深度学习框架
  • uni-app 小程序中的定位问题 以及 页面安全距离
  • 基于DrissionPage的表情包爬虫实现与解析(含源码)
  • 解释一下计算机中的内存对齐
  • 【Django】新增字段后兼容旧接口 This field is required
  • 【防火墙 pfsense】3 portal
  • Docker容器持久化
  • 博雷顿IPO点燃新能源机械市场,金众诚如何优化项目盈利
  • SOC估算:开路电压修正的安时积分法
  • Mybatis-Plus,IDEA2024版本
  • gerbera文件转PCB文件-Altium Designer
  • windows作业job介绍
  • 永辉超市一季度净利降近八成,未来12个月至18个月是改革成果集中释放期
  • 贵州通报9起群众身边不正之风和腐败问题典型案例
  • 美施压拉美国家选边站队,外交部:搞阵营对抗注定失败
  • 韩国首尔江南区一大型商场起火,消防部门正在灭火中
  • 南方医科大学原副校长宁习洲主动投案,接受审查调查
  • 成都一季度GDP为5930.3亿元,同比增长6%