LeetCode数据库_1179.重新格式化部门表
一、题目描述表Department------------------------| Column Name | Type |------------------------| id | int || revenue | int || month | varchar |------------------------在 SQL 中(id, month) 是表的联合主键。这个表格有关于每个部门每月收入的信息。月份month可以取下列值 [Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec]。重新格式化表格使得每个月都有一个部门 id 列和一个收入列。以任意顺序返回结果表。结果格式如以下示例所示。示例 1输入Department table:----------------------| id | revenue | month |----------------------| 1 | 8000 | Jan || 2 | 9000 | Jan || 3 | 10000 | Feb || 1 | 7000 | Feb || 1 | 6000 | Mar |----------------------输出---------------------------------------------------------------| id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue |---------------------------------------------------------------| 1 | 8000 | 7000 | 6000 | ... | null || 2 | 9000 | null | null | ... | null || 3 | null | 10000 | null | ... | null |---------------------------------------------------------------解释四月到十二月的收入为空。二、题解1、错误解答1.1、错误代码SELECT id, IF(month Jan, revenue, NULL) AS Jan_Revenue, IF(month Feb, revenue, NULL) AS Feb_Revenue, IF(month Mar, revenue, NULL) AS Mar_Revenue, IF(month Apr, revenue, NULL) AS Apr_Revenue, IF(month May, revenue, NULL) AS May_Revenue, IF(month Jun, revenue, NULL) AS Jun_Revenue, IF(month Jul, revenue, NULL) AS Jul_Revenue, IF(month Aug, revenue, NULL) AS Aug_Revenue, IF(month Sep, revenue, NULL) AS Sep_Revenue, IF(month Oct, revenue, NULL) AS Oct_Revenue, IF(month Nov, revenue, NULL) AS Nov_Revenue, IF(month Dec, revenue, NULL) AS Dec_Revenue FROM department GROUP BY id;执行结果如下输出| id | Jan_Revenue | Feb_Revenue | Mar_Revenue | Apr_Revenue | May_Revenue | Jun_Revenue | Jul_Revenue | Aug_Revenue | Sep_Revenue | Oct_Revenue | Nov_Revenue | Dec_Revenue || -- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- || 1 | 8000 | null | null | null | null | null | null | null | null | null | null | null || 2 | 9000 | null | null | null | null | null | null | null | null | null | null | null || 3 | null | 10000 | null | null | null | null | null | null | null | null | null | null |1.2、报错 / 结果错误核心原因1. 关键问题只写IF没聚合分组后只会保留第一条匹配数据GROUP BY id会把同一个部门的多条月度行合并成 1 行但单独IF(monthJan,revenue,NULL)不会自动取对应月份的值MySQL 只会随机取分组内第一条记录的字段其他月份全部变成NULL。举个例子 id1 有两条数据表格idmonthrevenue1Jan1001Feb200你的 SQL 执行后会出现两种异常若第一条是 JanFeb_Revenue 为 NULL若第一条是 FebJan_Revenue 为 NULL2、正确解答2.1、套聚合函数MAX()最标准解法用MAX()包裹IF同一 id 下会提取对应月份的收入非匹配月份是 NULLMAX 会过滤掉 NULL拿到有效值SELECT id, MAX(IF(month Jan, revenue, NULL)) AS Jan_Revenue, MAX(IF(month Feb, revenue, NULL)) AS Feb_Revenue, MAX(IF(month Mar, revenue, NULL)) AS Mar_Revenue, MAX(IF(month Apr, revenue, NULL)) AS Apr_Revenue, MAX(IF(month May, revenue, NULL)) AS May_Revenue, MAX(IF(month Jun, revenue, NULL)) AS Jun_Revenue, MAX(IF(month Jul, revenue, NULL)) AS Jul_Revenue, MAX(IF(month Aug, revenue, NULL)) AS Aug_Revenue, MAX(IF(month Sep, revenue, NULL)) AS Sep_Revenue, MAX(IF(month Oct, revenue, NULL)) AS Oct_Revenue, MAX(IF(month Nov, revenue, NULL)) AS Nov_Revenue, MAX(IF(month Dec, revenue, NULL)) AS Dec_Revenue FROM department GROUP BY id;补充说明为什么MAX可行 同一个 id 只会有一条对应月份的数据MAX会选中唯一的非 NULL 收入其余月份 NULL 不影响结果兼容 LeetCode 环境 全程只有SELECT无任何ALTER/DROP不会报权限不足兼容 MySQL 严格模式 如果不使用聚合函数在ONLY_FULL_GROUP_BY严格模式下会直接报语法错误加MAX后完全规避。2.2、CASE WHEN 等价写法效果完全一致SELECT id, MAX(CASE WHEN month Jan THEN revenue END) AS Jan_Revenue, MAX(CASE WHEN month Feb THEN revenue END) AS Feb_Revenue, MAX(CASE WHEN month Mar THEN revenue END) AS Mar_Revenue, MAX(CASE WHEN month Apr THEN revenue END) AS Apr_Revenue, MAX(CASE WHEN month May THEN revenue END) AS May_Revenue, MAX(CASE WHEN month Jun THEN revenue END) AS Jun_Revenue, MAX(CASE WHEN month Jul THEN revenue END) AS Jul_Revenue, MAX(CASE WHEN month Aug THEN revenue END) AS Aug_Revenue, MAX(CASE WHEN month Sep THEN revenue END) AS Sep_Revenue, MAX(CASE WHEN month Oct THEN revenue END) AS Oct_Revenue, MAX(CASE WHEN month Nov THEN revenue END) AS Nov_Revenue, MAX(CASE WHEN month Dec THEN revenue END) AS Dec_Revenue FROM department GROUP BY id;CASE WHEN语法规则 当所有WHEN条件都不匹配时默认返回 NULL等价于末尾写ELSE NULL两种写法执行结果一模一样。3、拓展不查回新表而是修改原表结构这也是我一开始的解法结果leetcode无权限ALTERALTER TABLE department ADD COLUMN Jan_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Feb_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Mar_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Apr_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN May_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Jun_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Jul_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Aug_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Sep_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Oct_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Nov_Revenue DECIMAL(20,2) DEFAULT NULL, ADD COLUMN Dec_Revenue DECIMAL(20,2) DEFAULT NULL; UPDATE department SET Jan_Revenue revenue WHERE month Jan; UPDATE department SET Feb_Revenue revenue WHERE month Feb; UPDATE department SET Mar_Revenue revenue WHERE month Mar; UPDATE department SET Apr_Revenue revenue WHERE month Apr; UPDATE department SET May_Revenue revenue WHERE month May; UPDATE department SET Jun_Revenue revenue WHERE month Jun; UPDATE department SET Jul_Revenue revenue WHERE month Jul; UPDATE department SET Aug_Revenue revenue WHERE month Aug; UPDATE department SET Sep_Revenue revenue WHERE month Sep; UPDATE department SET Oct_Revenue revenue WHERE month Oct; UPDATE department SET Nov_Revenue revenue WHERE month Nov; UPDATE department SET Dec_Revenue revenue WHERE month Dec; ALTER TABLE department DROP COLUMN revenue; ALTER TABLE department DROP COLUMN month;报错如图对UPDATE语句简化后的写法UPDATE department SET Jan\_Revenue IF(\month\Jan, revenue, Jan\_Revenue), Feb\_Revenue IF(\month\Feb, revenue, Feb\_Revenue), Mar\_Revenue IF(\month\Mar, revenue, Mar\_Revenue), Apr\_Revenue IF(\month\Apr, revenue, Apr\_Revenue), May\_Revenue IF(\month\May, revenue, May\_Revenue), Jun\_Revenue IF(\month\Jun, revenue, Jun\_Revenue), Jul\_Revenue IF(\month\Jul, revenue, Jul\_Revenue), Aug\_Revenue IF(\month\Aug, revenue, Aug\_Revenue), Sep\_Revenue IF(\month\Sep, revenue, Sep\_Revenue), Oct\_Revenue IF(\month\Oct, revenue, Oct\_Revenue), Nov\_Revenue IF(\month\Nov, revenue, Nov\_Revenue), Dec\_Revenue IF(\month\Dec, revenue, Dec\_Revenue);

相关新闻

安得和众|医疗行业:患者隐私与临床数据安全防护方案

安得和众|医疗行业:患者隐私与临床数据安全防护方案

行业背景:诊疗数据高频流转,终端外设管控薄弱医疗机构的数据安全面临独特挑战:门诊、住院部门终端设备广泛调阅、处理大量患者电子病历、医学影像(DICOM)等敏感信息,涉及患者姓名、身份证号、诊断记录、治疗…

2026/7/23 7:17:18 阅读更多 →
关于下标问题

关于下标问题

日常学习中所遇到的为什么这里的输出结果为-1?-1在我们计算机中索引中通常是不存在(可以理解为不符合条件,没有这个东西)的意思因为indexof是根据值查找下标,当前值里面没有0对应的值,所以返回了一个-1这里…

2026/7/23 7:45:51 阅读更多 →
自由能全预混低氮冷凝燃气容积式热水器三大原创核心技术

自由能全预混低氮冷凝燃气容积式热水器三大原创核心技术

自由能全预混低氮冷凝容积式热水器|三大原创核心技术,重构行业热水标准一、平板式宽域燃烧器:告别过滤耗材,实现免维护长效运行行业主流机型普遍采用直筒式燃烧结构,必须配套空气过滤器,长期使用极易积灰堵…

2026/7/22 13:36:24 阅读更多 →

最新新闻

聊聊空降管理者的landing(进阶版)

聊聊空降管理者的landing(进阶版)

这是鼎叔的第一百四十四篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本专栏《敏捷测试转型》,大量原创思考文章陆续推出。 空降者有关的landing实践技巧文章可以参考聊聊团队效能的自我诊断。通过团队代表访谈提炼基本判断&#xff…

2026/7/23 16:42:56 阅读更多 →
AI如何提升学术写作效率:智能文献与写作辅助工具解析

AI如何提升学术写作效率:智能文献与写作辅助工具解析

1. 项目概述:当学术写作遇上AI助手去年帮导师审稿时,我发现一个有趣现象:超过60%的退稿论文都存在相似的痛点——文献综述缺乏系统性、方法论描述不清晰、图表呈现不规范。这些本可以通过工具辅助避免的问题,却消耗着研究者们宝贵…

2026/7/23 16:42:56 阅读更多 →
2026年AI高薪岗位趋势与自学大模型避坑指南

2026年AI高薪岗位趋势与自学大模型避坑指南

1. 高薪AI岗位的市场现状分析2026年的AI人才市场正在经历一场前所未有的抢人大战。头部科技公司为具备大模型相关技能的人才开出了5万的月薪,这个数字还在持续攀升。我最近接触的几个猎头案例显示,某大厂为一位3年经验的LLM工程师开出了年薪80万股票期权…

2026/7/23 16:42:56 阅读更多 →
Unity动态扫光Shader:从原理到实现,打造全方位可调视觉引导效果

Unity动态扫光Shader:从原理到实现,打造全方位可调视觉引导效果

1. 项目概述:为什么我们需要一个动态扫光Shader? 在游戏和交互式应用开发中,视觉引导和氛围营造是提升沉浸感的关键。想象一下,在一个昏暗的遗迹场景里,玩家需要找到隐藏的开关,或者在一个科幻基地中&#…

2026/7/23 16:42:56 阅读更多 →
CNN-BiLSTM-KDE混合模型在时间序列预测中的应用

CNN-BiLSTM-KDE混合模型在时间序列预测中的应用

1. 项目概述 在工业预测、金融分析和环境监测等领域,多变量时间序列预测一直是个极具挑战性的课题。传统方法往往难以捕捉复杂数据中的时空依赖关系和非线性特征。最近我在一个风电功率预测项目中,尝试将CNN、BiLSTM和KDE三种技术融合,意外获…

2026/7/23 16:42:56 阅读更多 →
线索二叉树

线索二叉树

找到某个结点的前驱或后继 朴素思路: 从根节点出发,重新进行一次中序遍历,指针q记录当前访问的结点,指针pre记录上一个被访问的结点 ①当qp时,pre为前驱 ②当prep时,q为后继 构造(先序&#x…

2026/7/23 16:41:55 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻