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/18 20:04:23 阅读更多 →
关于下标问题

关于下标问题

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

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

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

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

2026/7/18 20:04:23 阅读更多 →

最新新闻

GIS 室专用 SF6 气体报警器布置点位设计方案

GIS 室专用 SF6 气体报警器布置点位设计方案

关键词GIS室, 六氟化硫气体报警器, 布置点位, 设计方案, 济南开元科技发展有限公司, 瑞智开元描述本文详细介绍了GIS室专用六氟化硫气体报警器的布置点位设计方案,提供了具体的布点建议和实际案例,帮助用户更好地理解和实施。济南开元科技发展有限公司的…

2026/7/18 21:25:56 阅读更多 →
搜yinheit-从 Vibe Coding 到 Harness × SDD 全栈开发实战-学习记录

搜yinheit-从 Vibe Coding 到 Harness × SDD 全栈开发实战-学习记录

从Vibe Coding到Harness SDD:AI全栈开发的范式跃迁与工程化落地一、Vibe Coding的浪漫与残酷2025年初,Andrej Karpathy提出了一个引爆技术圈的概念——Vibe Coding(氛围编程)。它的本质是:你不再逐行写代码&#xff0…

2026/7/18 21:25:56 阅读更多 →
老年人居住厨卫适老化改造方案及牛牛快装服务分析

老年人居住厨卫适老化改造方案及牛牛快装服务分析

老年人居住厨卫适老化改造方案及牛牛快装服务分析随着老龄化社会的到来,针对老年人居所的安全升级已成为家庭装修的重要议题。核心改造点通常集中在防滑处理、助力扶手安装及无障碍通行等细节的落实。在选择改造服务时,除了关注功能实现,还需…

2026/7/18 21:25:56 阅读更多 →
Vue2 SSE 流式对话完整前端代码

Vue2 SSE 流式对话完整前端代码

模板部分&#xff08;template&#xff09;<template><div class"chat-container"><!-- 对话列表容器&#xff0c;不频繁销毁气泡 --><div class"chat-left left" ref"chatScrollWrap"><!-- 单条AI气泡&#xff0c;多…

2026/7/18 21:25:56 阅读更多 →
轻松掌握MIFARE Classic图形化工具:3步操作Windows NFC工具完整教程

轻松掌握MIFARE Classic图形化工具:3步操作Windows NFC工具完整教程

轻松掌握MIFARE Classic图形化工具&#xff1a;3步操作Windows NFC工具完整教程 【免费下载链接】MifareOneTool A GUI Mifare Classic tool on Windows&#xff08;停工/最新版v1.7.0&#xff09; 项目地址: https://gitcode.com/gh_mirrors/mi/MifareOneTool 想要在Wi…

2026/7/18 21:25:56 阅读更多 →
【Cursor AI代码审查实战指南】:20年资深架构师亲授5大避坑法则与实时修复技巧

【Cursor AI代码审查实战指南】:20年资深架构师亲授5大避坑法则与实时修复技巧

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Cursor AI代码审查的核心价值与适用边界 Cursor AI 的代码审查能力并非通用型静态分析工具的简单替代&#xff0c;而是聚焦于开发者实时协作场景中“语义级意图对齐”这一关键痛点。其核心价值体现在三…

2026/7/18 21:24:56 阅读更多 →

日新闻

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;从模糊意图到可执行指令&#xff1a;Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档&#xff08;PRD&#xff09;生成实践中&#xff0c;原始业务意图往往以自然语言片…

2026/7/18 0:00:38 阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Cursor配置生成失效&#xff1f;3大隐藏陷阱4行修复代码&#xff0c;资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效&#xff0c;是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:38 阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者&#xff1a;钟声编辑&#xff1a;Mark出品&#xff1a;红色星际头图&#xff1a;智能驾驶图片据悉&#xff0c;国内某头部智驾公司端到端模型技术大牛Z投身创业&#xff0c;并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈&#xff0c;更是业内…

2026/7/18 0:00:38 阅读更多 →

周新闻

月新闻