【LeetCode-SQL每日一练】—— 1179. 重新格式化部门表

 🎈写在前面

🙋‍♂️大家好呀,我是超梦。大家可以叫我小梦~

又到了练习SQL的时候啦!一起来学习吧!

🙋‍♂️ 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽。


目录

🌌SQL题目

🌌解题思路

🌌方法实现

🌌代码测试

🌌知识点小结

🌌往期推荐



🌌SQL题目

🌀部门表 Department

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| revenue       | int     |
| month         | varchar |
+---------------+---------+
(id, month) 是表的联合主键。
这个表格有关于每个部门每月收入的信息。
月份(month)可以取下列值 ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]。

题目:

编写一个 SQL 查询来重新格式化表,使得新的表中有一个部门 id 列和一些对应 每个月 的收入(revenue)列。

查询结果格式如下面的示例所示:

Department 表:
+------+---------+-------+
| 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        |
+------+-------------+-------------+-------------+-----+-------------+注意,结果表有 13 列 (1个部门 id 列 + 12个月份的收入列)。



🌌解题思路

department 表中存储这所有人所有月的收入,这里的需求是将 department 的 month 列拆成具体的月份。

   1.  首先将 department 根据 id 分组。
   2.  使用 case month when 'Jan' then revenue end 计算出一月份的收入,(也可以使用 if(month = 'Jan', revenue, null))。12个月都按照这个方式写完。


🌌方法实现

根据上述解题思路,我们有两种方式解决

方法一:

select id,sum(case month when 'Jan' then revenue end) as 'Jan_Revenue',sum(case month when 'Feb' then revenue end) as 'Feb_Revenue',sum(case month when 'Mar' then revenue end) as 'Mar_Revenue',sum(case month when 'Apr' then revenue end) as 'Apr_Revenue',sum(case month when 'May' then revenue end) as 'May_Revenue',sum(case month when 'Jun' then revenue end) as 'Jun_Revenue',sum(case month when 'Jul' then revenue end) as 'Jul_Revenue',sum(case month when 'Aug' then revenue end) as 'Aug_Revenue',sum(case month when 'Sep' then revenue end) as 'Sep_Revenue',sum(case month when 'Oct' then revenue end) as 'Oct_Revenue',sum(case month when 'Nov' then revenue end) as 'Nov_Revenue',sum(case month when 'Dec' then revenue end) as 'Dec_Revenue'
from department group by id;

方法二:

select id,sum(if(month = 'Jan', revenue, null)) as 'Jan_Revenue',sum(if(month = 'Feb', revenue, null)) as 'Feb_Revenue',sum(if(month = 'Mar', revenue, null)) as 'Mar_Revenue',sum(if(month = 'Apr', revenue, null)) as 'Apr_Revenue',sum(if(month = 'May', revenue, null)) as 'May_Revenue',sum(if(month = 'Jun', revenue, null)) as 'Jun_Revenue',sum(if(month = 'Jul', revenue, null)) as 'Jul_Revenue',sum(if(month = 'Aug', revenue, null)) as 'Aug_Revenue',sum(if(month = 'Sep', revenue, null)) as 'Sep_Revenue',sum(if(month = 'Oct', revenue, null)) as 'Oct_Revenue',sum(if(month = 'Nov', revenue, null)) as 'Nov_Revenue',sum(if(month = 'Dec', revenue, null)) as 'Dec_Revenue'
from department group by id;


🌌代码测试

 与预期结果一致,测试成功!执行所需时间 160s


  与预期结果一致,测试成功!执行所需时间 196s



🌌知识点小结

🌀case when:

    简单函数(枚举这个字段所有可能的值)
    CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END

    搜索函数(搜索函数可以写判断,并且搜索函数只会返回第一个符合条件的值,其他case被忽略)

CASE WHEN [expr] THEN [result1]…ELSE [default] END

🌀if()函数:

        IF函数根据条件的结果为true或false,返回第一个值,或第二个值。

IF(condition, value_if_true, value_if_false)


🌌往期推荐

🚀【LeetCode-SQL每日一练】—— 627. 变更性别

🚀【LeetCode-SQL每日一练】—— 620. 有趣的电影

🚀【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱



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

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

相关文章

阿里一面 —— 什么是多线程?

马上就要到金三银四佳季了,是找工作的好时候,小伙伴们一定要把握好时机,找到心仪的高薪工作。找工作就少不了面试,那我们从现在开始,多刷刷面试题,查缺补漏!!! 目录 ⭐什…

第九节:JWT简介和以JS+WebApi为例基于JWT的安全校验

一. 简介 1. 背景 传统的基于Session的校验存在诸多问题,比如:Session过期、服务器开销过大、不能分布式部署、不适合前后端分离的项目。 传统的基于Token的校验需要存储Key-Value信息,存在Session或数据库中都有弊端,如果按照一…

赢在CSDN —— 我们一起向前

赢在CSDN,一起向前! ⭐初遇CSDN ⭐我也成为了一名创作博主 ⭐如何在CSDN赚到一桶金 ⭐CSDN带给自己的成长 ⭐对CSDN的期待 ⭐个人创作的规划 ⭐初遇CSDN 不知不觉来到CSDN已经有1379天的时间啦,时间过得好快呀!记得刚踏进CS…

volatile关键字的作用-适用场景

volatile在Java并发编程中常用于保持内存可见性和防止指令重排序。内存可见性(Memory Visibility):所有线程都能看到共享内存的最新状态;防止指令重排:在基于偏序关系的Happens-Before内存模型中,指令重排技…

MySQL你掌握了多少?这些SQL题你能作对几道?

MySQL是工作中常用数据库,必须掌握,但小伙伴们又掌握了多少呢,今天一起来测试一下吧~ 力扣SQL ⭐组合两个表 ⭐第二高的薪水 ⭐超过经理收入的员工 ⭐查找重复的电子邮箱 ⭐从不订购的客户 ⭐大的国家 ⭐删除重复的电子邮箱 ⭐有趣的…

mybatis配置文件加注释报错怎么办?改一笔就能帮你解决

今天配置mybatis写了一个小demo,本以为顺顺利利的就完成了,没想到就报了如下错误。直接emo了。 java.lang.ExceptionInInitializerErrorat com.lm.learn.dao.UserTest.getUsers(UserTest.java:14)at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ…

第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)

一. 整体介绍 温馨提示:内核模式锁,在不到万不得已的情况下,不要使用它,因为代价太大了,有很多种替代方案。 内核模式锁包括: ①:事件锁 ②:信号量 ③:互斥锁 ④&#xf…

玩转Mybatis —— 一个小demo,带你快速入门Mybatis

目录 🤞Mybatis官网介绍 🤞Mybatis安装 🤞Mybatis核心配置文件 🤞构建 SqlSessionFactory 🤞获取 SqlSession 🤞通过 XML 定义已映射的 SQL 语句 🤞作用域(Scope)…

MySQL掌握的怎么样?听说这几道MySQL面试题没有几个人能答得出来

MySQL可谓是程序员必备技能,怎么检测自己掌握了多少呢,一起来测试一下吧!一共12个关卡,看看你能闯到第几关? 目录 什么是左外链接,什么是右外链接? 分页关键字是什么? Select 语句…

IIS/ASP.NET 管道

ASP.NET MVC 是建立在 ASP.NET 平台上基于 MVC 模式的 Web 应用框架,深刻理解 ASP.NET MVC 的前提是对 ASP.NET 管道式设计具有深刻的认识。由于 ASP.NET Web 应用大都寄宿于 IIS 上,将两者结合起来了解在 IIS 和 ASP.NET 管道中是如何流动的。 IIS5.x与…

【JAVA知识点每日一练】 —— 运算符的那些事

都说基础不牢地动山摇,还真是那么回事!别小看这运算符,每个语法中运算符扮演者举足轻重的角色,稍微没用对,那可就犯了大错误! 接下来跟随小梦,迈着轻松且愉快的步伐一起看看运算符的那些事吧~ 运…

ASP.NET Core管道深度剖析[共4篇]

在《管道是如何处理HTTP请求的?》中,我们对ASP.NET Core的请求处理管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的。这样一个管道由一个服务器和一个HttpApplication构成&#xff0c…

SQL为什么动不动就百行以K记?

发明SQL的初衷之一显然是为了降低人们实施数据查询计算的难度。SQL中用了不少类英语的词汇和语法,这是希望非技术人员也能掌握。确实,简单的SQL可以当作英语阅读,即使没有程序设计经验的人也能运用。 然而,面对稍稍复杂的查询计算…

深入理解happens-before和as-if-serial语义

本文大部分整理自《Java并发编程的艺术》,温故而知新,加深对基础的理解程度。下面可以和小编来一起学习下 概述 本文大部分整理自《Java并发编程的艺术》,温故而知新,加深对基础的理解程度。 指令序列的重排序 我们在编写代码…

开源SPL重新定义OLAP Server

OLAP(Online Analytical Processing)是指在线联机分析,基于数据查询计算并实时获得返回结果。日常业务中的报表、数据查询、多维分析等一切需要即时返回结果的数据查询任务都属于OLAP的范畴。对应的,行业内也有相应产品来满足这类…

平层、错层、跃层、复式、loft的区别是什么?

平层正如字面上的理解,是所有功能厅都在同一个水平面上。平时我们所见的户型,都是平层。错层室内各功能用房在不同的平面上,用2-4个台阶进行隔断。跃层是两层的住宅,在室内会设计一条楼梯连接上下两层,功能区会分开。复…

C#集合类型总结和性能分析

C#集合类型概述 集合是.NET FCL(Framework Class Library)中很重要的一部分。所有的集合类都继承自IEnumerable。集合类总体可分为一下几类:关联/非关联型集合,顺序/随机访问集合,顺序/无序集合,泛型/非泛型集合,线程…

Spring AOP(通知、连接点、切点、切面)

一、AOP术语 通知(Advice)   切面的工作被称为通知。通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。 5种通知类型:前置通知(Before):在…

C#中几种常用的集合的用法

集合:将一推数据类型相同的数据放入到一个容器内,该容器就是数组:内存中开辟的一连串空间。 非泛型集合 ArrayList集合: ArrayList是基于数组实现的,是一个动态数组,其容量能自动 增长 ArrayList的命名空间System.…

C#使用Redis的基本操作

一&#xff0c;引入dll 1.ServiceStack.Common.dll 2.ServiceStack.Interfaces.dll 3.ServiceStack.Redis.dll 4.ServiceStack.Text.dll 二&#xff0c;修改配置文件 在你的配置文件中加入如下的代码&#xff1a; <appSettings><add key"RedisPath" value…