最近看到一个SQL面试题,觉得可以作为范例熟悉一下,虽然这道题不难,但是看到大家都讨论关于用什么函数来处理时,我认为问题变复杂了,应该谈谈我的感想了。题目如下:
求:1、每个科目的最高分。
2、java成绩最高的姓名
3、java成绩第二高的姓名
我用MySQL测试的:
1.每个科目的最高分:
SELECT kemu,max(score) FROM table GROUP BY kemu;
分析:找出成绩最高的人后,根据科目分组就可以得到每组的最高分的人。
思路应用:以后再遇到求某几种大的类型下小类型中的最高值的问题,这个主要应用的是数据库中的分组,可以将此思路应用其中,如:
1.关于求某种产品价格最高的产品
2.求某几个地区销售量最高的店铺
3.求某几种类型数据中子类型中数量最高的集合
2.java成绩最高的姓名:
SELECT name FROM table WHERE kemu='java' and
score=(SELECT max(score) FROM table WHERE kemu='java');
分析:从表格中查询名称时,提出两点条件1.科目是java,2.科目是java的最高分
如果是名字和分数都要的话就很简单了直接打出:
SELECT name,max(cj) AS max_cj FROM table WHERE kemu='java';
思路应用:关于此类问题,主要是在一个大类型集合中求某一种类型下关联类型中最高的值,我们可以应用的方面有:
1.求某一科目中得分最高的成绩、名字等
2.求某一地区中销售最高的单位
3.求某一类型产品下销量最高的产品
3.java成绩第二高的姓名:
SELECT name FROM table WHERE kemu='java' GROUP BY name
ORDER BY cj DESC LIMIT 1,1;
分析:在查询姓名时根据[color=blue]kemu='java' [/color]这个条件,然后根据姓名分组,然后根据成绩排序,最后在列表中根据TOP 方法 LIMIT 选取从0开始的第二个姓名,只取1个人。OK了!这个题目主要考察了分组,排名和TOP取值方面的知识,难度相对最高。如果遇到这样的题,应该把大的问题一个个分散成小问题,然后一个个的解决小问题,然后拼凑起来,大问题就可以解决了。
思路应用:这个题目主要是在一个大类型集合中求某一种类型的某种排名中的某一个值,是大家在分析时最容易混淆的地方。其实针对这种题目,进行分解问题来一步步实现答案是一种很好的方法。这种题的应用有:
1.求这个科目根据某种条件排名第几的值
2.求这个地区根据某一条件排名第几的店铺
3.求这个类型产品根据某一条件排名在第几位的产品
最后总结一下:不论什么题,对于程序员,都应该吃透,不仅仅是会做了,关键是能把这个知识传达给你是思想和精髓找出来,再进一步说就是分析这道题:是什么?
能做什么?
怎么做?
为什么这么做?
我能用它来做什么?
就拿刚才的问题来说,从SQL的角度来讲,这道题
是什么? 是一个班级的学生成绩表。
能做什么? 能够来显示班级里每个学生学科成绩好坏的排名,让老师和学生一目了然
怎么做? 通过SQL语句中的分组,排序,TOP排名取值来实现
为什么这么做? 不排序的表和名单不能客观及时详细的显示出我们要的信息
我能用它来做什么? 可以通过这种排序或者分组方法得到其他类型问题的解决方案
我们不一定在实际应用中把每件事分析的这么细,但是我们要养成一种习惯,就是获取精髓,得人之鱼不如得人之渔。我们在开发中会遇到各种各样的问题,如果不把陌生的知识吃透,我们的水平肯定不能大步提高。也不能及时掌握新的技术,肯定会被淘汰,所有,程序员,很有必要做总结知识的工作。
分享到:
相关推荐
下面将详细解析提供的面试题,以便深入理解SQL的关键知识点。 1. 删除数据库的命令是`DROP DATABASE`,选项C。这用于彻底移除一个数据库及其所有对象。 2. 在关系型数据库中,表间关系包括一对一(1:1)、一对多...
以下是一些常见的SQL面试题及其解答,这些题目涵盖了数据库的基本操作,如选择、聚合、排序、连接以及子查询。 28、问题:如何根据部门名称(不包含“human resource”)计算平均工资并按部门名称排序? 解答:...
- **第二范式(2NF)**:建立在1NF基础上,要求每个非主键字段完全依赖于整个主键。 - **第三范式(3NF)**:建立在2NF基础上,要求每个非主键字段都不传递依赖于主键。 - **BCNF**:所有非主属性都不部分依赖于码且...
在SQL数据库领域,面试题和笔试题经常涉及对数据操作的深入理解和巧妙运用。以下是根据提供的部分内容解析的一些关键知识点: 1. **排除特定部门的平均工资计算** 题目要求从`employee`表中抽取部门名称及其平均...
### 数据库面试题知识点解析 #### 一、基础题知识点详解 **1. Table/Extent/Segment/Block之间关系** - **Table**: 表是数据库中最基本的数据组织单元,用于存储特定类型的数据集合。 - **Extent**: 当表的数据...
题目要求找出上过“db”课程的学生数量、成绩最高的学生编号以及每门课成绩大于90分的人数。 **知识点:** - **子查询** 用于从其他表中获取数据。 - **COUNT()** 函数用于计数。 **SQL代码示例:** ```sql -- 上...
这个查询首先按学生名字`name`对记录进行分组,然后计算每个学生的总分数,接着按照总分数降序排序,最后通过`LIMIT`限制返回结果为第2到第5名。 知识点:`GROUP BY`用于分组数据,`SUM()`用于求和,`ORDER BY`...
第一范式要求表中每个字段都是原子的,不可再分;第二范式要求表中的所有非主键字段都必须完全依赖于主键;第三范式要求表中的所有字段直接依赖于主键,不存在传递依赖。 在MySQL中,可以为一个表设置多个触发器,...
以下是一些MySQL高频经典面试题的详细解答: 1. **数据库的三范式**: - 第一范式(1NF):确保每列都是原子性的,即不可再分的数据项。 - 第二范式(2NF):要求表中的非主属性完全依赖于主键,不存在部分依赖。...
以上两种方法均可实现表格的转换,第一种方法通过多个子查询实现,而第二种方法利用了窗口函数来完成数据的重组。 这些示例涵盖了SQL查询的基本技巧,包括子查询、聚合函数、窗口函数以及数据处理等多方面内容,...
- **定义**: 确保每列(或每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),即表中的每一列都是单一的数据项,不可进一步拆分。 - **示例**: 假设有一个“顾客”表,其中包括“姓名”、“编号”、...
- 第二题中,删除重复学生记录,保持每个唯一组合只有一条记录。使用`MIN()`函数配合`GROUP BY`可以达到目的: ```sql DELETE FROM tablename WHERE 自动编号 NOT IN ( SELECT MIN(自动编号) FROM tablename ...
21. **SQL查询**:(1) 使用JOIN和WHERE子句查询最高分学生;(2) 使用INNER JOIN和WHERE子句查询特定条件的学生。 22. **果冻问题**:至少需要抓3个果冻,因为前2个可能是不同颜色,第3个无论是什么颜色都会与前2个...
- **定义**: 一种特殊的二叉树,其中每个节点的值都大于其左子树中的任何节点的值,并且小于其右子树中的任何节点的值。 - **原理**: 通过对节点的左右子树不断比较来实现查找、插入和删除等操作。 **6. 排序算法...
这个复杂的查询首先找出Dany的所有考试记录,然后找到最高分的科目,最后返回这个科目的教师姓名。 以上是针对每个查询操作的详细解析,这些查询展示了如何在MySQL中进行多表联合查询,包括JOIN操作,WHERE子句,...
- 查询每个班级 `Fclass` 的最高分 `max(Fscore)`。 - 查找具有至少两种不同课程编号 `Fno` 的记录对应的 `FID`。 #### 示例代码 ```sql -- 查询每个班级的最高分 SELECT Fclass, MAX(Fscore) FROM table1 GROUP...