面试官提问:如何通过sql方式将数据库表行转列?

简介: 在刚进入 IT 行业的第一年换工作的时候,至今让我印象最深刻的有一个这样的面试题:如何通过 SQL 方式将数据库的行转列?当时的面试官让我现场写 SQL,信心满满的我,我觉得我可以做出来,然后10分支、20分钟、30分钟...过去了,很遗憾一点动静都没有。最后的我不得不服,结局相信大家也能猜到是啥了!💔

一、提问环节

在刚进入 IT 行业的第一年换工作的时候,至今让我印象最深刻的有一个这样的面试题:如何通过 SQL 方式将数据库的行转列

当时的面试官让我现场写 SQL,信心满满的我,我觉得我可以做出来,然后10分支、20分钟、30分钟...过去了,很遗憾一点动静都没有。

最后的我不得不服,结局相信大家也能猜到是啥了!💔

二、场景分析

面试结束之后,不服输的我决定要把这个问题给破解掉,回到自己的租处之后,打开电脑,决定从0开始琢磨,怎么实现行转列呢?

其实如果你是一个经常玩 sql 的人,相信看到这个提问的时候,你心里已经有答案了,解决这个问题,方法其实很简单,通过下面这个语法即可实现。

case  when ... then ... else ...  end

例如下面是一张很常见的学生考试成绩表,我们将学生的考试成绩以单表的形式存储到数据库表中。

9.jpg

我们想要以下图形式,并以总分排名从高到底进行展示,如何通过 SQL 方式实现呢?

10.jpg

有的同学说,我可以通代码层面来实现,不可否认,代码完全可以实现,只需要封装一个如下形式的数据结构就可以了。

//学生姓名为key,相同key的数据封装到List集合中
Map<String, List<StudentExam> studentExamMap = new HashMap();

其中学生姓名就是一个Key,然后把相同学生姓名的数据封装到List<StudentExam>集合中,最后将学生姓名的总分合计起来,做一个排序,也可以实现。

在面对少量数据的时候,这种方式没问题,只是计算复杂了一点,但是当数据库表超过 5000 以上的时候,这种在代码层面的计算,内存就有点吃不消了,因此极其不推荐采用。

面对这种场景需求,我们多半会采用通过 sql 方式来解决,那么通过 sql 方式破解呢?请看下图

11.jpg

其中最关键的一步就是先用case when ... then ... else ... end语法将不同的课程分数分离出来,然后通过sum + group聚合函数查询进行分数汇总,最后通过order by语法将分数进行从高到低排序,进而达到我们想要的预期效果!

其实像这样的行转列的查询逻辑非常的普遍,例如刚过去的奥运奖牌排行榜!

12.jpg

还有全球新冠疫情数据排名。

13.jpg

可能不同的应用实现方式不一样,但是大体的解决思路是一样的,将数据进行分组聚合汇总,然后按照分数进行从高到低排名。

通过 SQL 实现还有一个非常大的好处,就是可以根据不同的维度进行排序,同时支持多个字段进行排序,如果在代码层面去实现排序,相当复杂。

三、小结

本文主要围绕如何通过 sql 的方式,将数据库表中的行转列进行显示,希望能帮助到大家!

目录
打赏
0
0
0
0
149
分享
相关文章
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
55 6
面试官刁钻提问?轻松应对 break、continue 和 return 的巧妙用法
小米,一位技术博主,针对 Java 面试中常见的 `break`、`continue` 和 `return` 关键字进行了详细讲解。通过打怪故事和代码实例,解释了它们的使用场景及注意事项,帮助读者更好地理解和应用这些控制语句。
49 12
面试官刁钻提问?轻松应对 break、continue 和 return 的巧妙用法
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
85 11
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
233 14
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等