1 题目

这确实是一个真实的面试题,琢磨一下吧!知识不用,就会丢掉,我太依赖各种框架和dll了,已经忘记了最基本的东西。有多久没有写过SQL了,我已经不记得了。

已知表信息如下:

Department(depID, depName),depID 系编号,DepName系名

Student(stuID, name, depID) 学生编号,姓名,系编号

Score(stuID, category, score) 学生编码,科目,成绩

找出每一个系的最高分,并且按系编号,学生编号升序排列,要求顺序输出以下信息:

系编号,系名,学生编号,姓名,总分

2 实验

  1. USE [test]
  2. GO
  3. /****** Object:  Table [dbo].[Score]    Script Date: 05/11/2015 23:16:23 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. SET ANSI_PADDING ON
  9. GO
  10. CREATE TABLE [dbo].[Score](
  11. [stuID] [int] NOT NULL,
  12. [category] [varchar](50) NOT NULL,
  13. [score] [int] NOT NULL
  14. ) ON [PRIMARY]
  15. GO
  16. SET ANSI_PADDING OFF
  17. GO
  18. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (1, N'英语', 80)
  19. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (2, N'数学', 80)
  20. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (1, N'数学', 70)
  21. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (2, N'英语', 89)
  22. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (3, N'英语', 81)
  23. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (3, N'数学', 71)
  24. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (4, N'数学', 91)
  25. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (4, N'英语', 61)
  26. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (5, N'英语', 91)
  27. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (6, N'英语', 89)
  28. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (7, N'英语', 77)
  29. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (8, N'英语', 97)
  30. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (9, N'英语', 57)
  31. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (5, N'数学', 87)
  32. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (6, N'数学', 89)
  33. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (7, N'数学', 80)
  34. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (8, N'数学', 81)
  35. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (9, N'数学', 84)
  36. /****** Object:  Table [dbo].[Department]    Script Date: 05/11/2015 23:16:23 ******/
  37. SET ANSI_NULLS ON
  38. GO
  39. SET QUOTED_IDENTIFIER ON
  40. GO
  41. SET ANSI_PADDING ON
  42. GO
  43. CREATE TABLE [dbo].[Department](
  44. [depID] [int] IDENTITY(1,1) NOT NULL,
  45. [depName] [varchar](50) NOT NULL,
  46. PRIMARY KEY CLUSTERED
  47. (
  48. [depID] ASC
  49. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  50. ) ON [PRIMARY]
  51. GO
  52. SET ANSI_PADDING OFF
  53. GO
  54. SET IDENTITY_INSERT [dbo].[Department] ON
  55. INSERT [dbo].[Department] ([depID], [depName]) VALUES (1, N'计算机')
  56. INSERT [dbo].[Department] ([depID], [depName]) VALUES (2, N'生物')
  57. INSERT [dbo].[Department] ([depID], [depName]) VALUES (3, N'数学')
  58. SET IDENTITY_INSERT [dbo].[Department] OFF
  59. /****** Object:  Table [dbo].[Student]    Script Date: 05/11/2015 23:16:23 ******/
  60. SET ANSI_NULLS ON
  61. GO
  62. SET QUOTED_IDENTIFIER ON
  63. GO
  64. SET ANSI_PADDING ON
  65. GO
  66. CREATE TABLE [dbo].[Student](
  67. [stuID] [int] IDENTITY(1,1) NOT NULL,
  68. [stuName] [varchar](50) NOT NULL,
  69. [deptID] [int] NOT NULL,
  70. PRIMARY KEY CLUSTERED
  71. (
  72. [stuID] ASC
  73. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  74. ) ON [PRIMARY]
  75. GO
  76. SET ANSI_PADDING OFF
  77. GO
  78. SET IDENTITY_INSERT [dbo].[Student] ON
  79. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (1, N'计算机张三', 1)
  80. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (2, N'计算机李四', 1)
  81. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (3, N'计算机王五', 1)
  82. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (4, N'生物amy', 2)
  83. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (5, N'生物kity', 2)
  84. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (6, N'生物lucky', 2)
  85. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (7, N'数学_yiming', 3)
  86. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (8, N'数学_haoxue', 3)
  87. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (9, N'数学_wuyong', 3)
  88. SET IDENTITY_INSERT [dbo].[Student] OFF
  89. /****** Object:  Default [DF__Departmen__depNa__5441852A]    Script Date: 05/11/2015 23:16:23 ******/
  90. ALTER TABLE [dbo].[Department] ADD  DEFAULT ('') FOR [depName]
  91. GO
  92. /****** Object:  Default [DF__Score__category__5EBF139D]    Script Date: 05/11/2015 23:16:23 ******/
  93. ALTER TABLE [dbo].[Score] ADD  DEFAULT ('') FOR [category]
  94. GO
  95. /****** Object:  Default [DF__Score__score__5FB337D6]    Script Date: 05/11/2015 23:16:23 ******/
  96. ALTER TABLE [dbo].[Score] ADD  DEFAULT ((0)) FOR [score]
  97. GO
  98. /****** Object:  Default [DF__Student__stuName__59063A47]    Script Date: 05/11/2015 23:16:23 ******/
  99. ALTER TABLE [dbo].[Student] ADD  DEFAULT ('') FOR [stuName]
  100. GO
  101. /****** Object:  ForeignKey [FK__Student__deptID__59FA5E80]    Script Date: 05/11/2015 23:16:23 ******/
  102. ALTER TABLE [dbo].[Student]  WITH CHECK ADD FOREIGN KEY([deptID])
  103. REFERENCES [dbo].[Department] ([depID])
  104. GO
  105. 准备环境

3 结果

面试的时候,没有写出来,当时脑袋昏沉沉的。也确实好久没有写复杂的sql语句了。今天花了2到3个小时,终于试出来了。不知道有没有更好的写法?

  1. -- 每个系里的最高分的学生信息
  2. SELECT Department.depID, Department.depName, Student.stuID, stuName, Dscore.scores
  3. FROM Department
  4. LEFT JOIN Student
  5. on department.depID = student.deptID
  6. LEFT JOIN (SELECT Score.stuId, SUM(Score) AS scores
  7. FROM Score
  8. GROUP by stuID
  9. ) AS Dscore
  10. on Student.stuID = dScore.stuID
  11. where exists    (
  12. select *
  13. from
  14. (
  15. SELECT deptID, MAX(scores) AS topScores
  16. FROM Student
  17. LEFT JOIN
  18. (
  19. SELECT stuID,SUM(score) AS scores
  20. FROM Score
  21. GROUP BY stuID) AS newScore
  22. ON Student.stuID = newScore.stuID
  23. group by deptID) AS depScore
  24. where Department.depID = depScore.deptID and Dscore.scores=depScore.topScores
  25. )
  26. order by Department.depID,Student.stuID;

【编辑推荐】

作者:岁月如初

来源:51CTO

.NET高级工程师面试题之SQL篇相关推荐

  1. 常见面试题整理--数据库篇(每位开发者必备

    常见面试题整理--数据库篇(每位开发者必备) 转载自:https://zhuanlan.zhihu.com/p/23713529        知乎专栏 继续前面有关于的Python面试的两篇内容:P ...

  2. 2020最新大厂内部 PHP 高级工程师面试题汇总(一)

    1.给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,1],[1,0]) 能组成一个矩形. 我们分析这道题, 给4个标点,判断是否矩形 高中知识,矩形有4条边,两两相 ...

  3. Redis7实战加面试题-高阶篇(案例落地实战bitmap/hyperloglog/GEO)

    案例落地实战bitmap/hyperloglog/GEO 面试题: 抖音电商直播,主播介绍的商品有评论,1个商品对应了1系列的评论,排序+展现+取前10条记录 用户在手机App上的签到打卡信息:1天对 ...

  4. access汇总含义_2020最新大厂内部 PHP 高级工程师面试题汇总(二)

    51.数据库中的存放了用户 ID, 扣费很多行,redis 中存放的是用户的钱包,现在要写一个脚本,将数据库中的扣费记录同步到 redis 中,每 5 分钟执行一次.请问要考虑哪些问题? 思路:生产者 ...

  5. 前端面试题(html篇)

    前端面试题(html篇) 转载于:https://www.cnblogs.com/mc67/p/5311613.html

  6. 剑指offer试题(PHP篇一)

    剑指offer试题(PHP篇一) 1.二维数组中的查找 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 ...

  7. C语言面试题之华为篇2(答案全)

    C语言面试题之华为篇(答案全) (1)什么是预编译,何时需要预编译: 答案: 1.总是使用不经常改动的大型代码体. 2.程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项.在这种情况 ...

  8. 2019阿里天猫团队Java高级工程师面试题之三轮面试

    转载自  2019阿里天猫团队Java高级工程师面试题之三轮面试 作者:编程砖家 https://www.cnblogs.com/xiaoyangjia/p/10697324.html 一.第一面 1 ...

  9. 语句 查询每个人每个科目的最高分_转行数据分析师专栏(SQL篇)-05多表查询...

    数据表(4张)及数据情况: 搭建数据表数据参考: 空杯希望:转行数据分析师专栏(SQL篇)-01SQL入门​zhuanlan.zhihu.com 一.表的加法 1.先新建一个表course1(和cou ...

最新文章

  1. linux按时间排序并查看发现,linux下扫描文件并按时间排序
  2. Python 工匠:善用变量来改善代码质量
  3. jquery json 判断用户是否已注册
  4. Java远程发送表单信息,java – 从html表单读取POST数据发送到serversocket
  5. redis多端口启动
  6. 华为鸿蒙搭载芯片,独立188天,荣耀50系列破冰!6nm芯片,不搭载鸿蒙
  7. 【Linux】一步一步学Linux——sort命令(53)
  8. NgRx 里 first 和 take(1) 操作符的区别
  9. pp助手苹果版_生日助手时间管理软件免费版下载-生日助手倒计时app苹果版下载ios...
  10. BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)...
  11. arduino液位传感器_如何使用Arduino + VL53L0X来制作液位感应设备
  12. if else if else语句格式_计算机各语言之间if...else区别
  13. 多算法综合的文本挖掘系统
  14. Silverlight实用窍门系列:74.Silverlight使用Perst数据库Demo
  15. 软考数据库系统工程师day01
  16. 自然语言处理NLP知识结构
  17. linux udp数据包发送间隔,如何每1 ms发送一次UDP数据包?
  18. iRedMail邮件服务的部署
  19. SwitchHosts For Mac快速切换修改hosts文件工具
  20. Java Tomcat生成图片验证码不显示问题 超坑记录

热门文章

  1. Vue 实现拖拽模块(二)自定义拖拽组件位置
  2. [论文解读]Going out on a limb: Joint Extraction of Entity Mentions and Relations without...
  3. Matlab数字图像的傅里叶变换(FFT)
  4. 【数字图像处理】空间滤波
  5. validation accuracy vs train accuracy
  6. 【302期】SpringBoot 项目鉴权的 4 种方式,你了解吗?
  7. 服务器问题排查的思路
  8. 做程序员的第八个年头——2021年个人工作总结
  9. http 请求405 错误
  10. 概率算法1-应用定积分计算