摘要: 给定一个Weather表,编写一个SQL查询来查找与之前(昨天的)日期相比温度更高的所有日期的id。 创建表和数据: 解法: 1.思路简单。表自连接,找出温度比前一天高的行。 问题的关键是确定日期的前一天。 日期函数: DATEDIFF(date1,date2) ,返回date1与date2之间相差 阅读全文
posted @ 2019-10-22 23:18 forever_fortunate 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 编写一个SQL查询来删除Person表中所有重复的电子邮件,在重复的邮件中只保留Id最小的邮件。 创建表和数据: 解法: 1.按email分组,找到每组id最小的行。 从原表中DELETE掉不在表2中的行。 注意:DELETE与FROM之间,只放置了P1。说明只删除P1中的行,不删除P2中的行。 F 阅读全文
posted @ 2019-10-22 23:09 forever_fortunate 阅读(162) 评论(0) 推荐(0) 编辑
摘要: Employee 表包含所有员工信息,每个员工有对应的 Id,此外还有一列部门 Id。 创建表和数据: 解法: 1.判断每个人A是不是在这三批人中的一个。找出同一部门种比A薪水高的薪水种数N。用子查询完成。如果N<3,那么A属于这三批人。 2.先找出每个部门薪水第三高的薪水A。每个人的薪水只要大于等 阅读全文
posted @ 2019-10-22 22:55 forever_fortunate 阅读(348) 评论(0) 推荐(0) 编辑
摘要: Employee表有所有员工。每个员工有 Id,salary 和 department Id 信息。 创建表和数据: 解法: 1.先找出每个部门的最高薪水。 连接员工表和部门表,group by对部门分组,再求每组的最高薪水。用子查询得出临时表F(id,name,m)。 再次,连接员工表和临时表F, 阅读全文
posted @ 2019-10-22 22:28 forever_fortunate 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 假设一个网站包含两个表,Customers 表和 Orders 表。编写一个SQL语句找出所有从不订购任何东西的客户。 创建表和数据: 解法: 1.顾客表的id和订单表的customerid关联,得出的是买了的东西的顾客。用left join,没买东西的顾客,其对应的订单为空。这是一种求集合差的方法 阅读全文
posted @ 2019-10-22 22:16 forever_fortunate 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 编写一个 SQL查询,来查找名为 Person 的表中的所有重复电子邮件。 创建表和数据: 解法: 1.如果一个字段的值在表中重复了,那么含有重复值的行数一定超过1。 group by 对Email分组,那么Email重复的行个数大于1。 having 筛选出这些行。 2.假设表中的字段Id是唯一的 阅读全文
posted @ 2019-10-22 22:09 forever_fortunate 阅读(187) 评论(0) 推荐(0) 编辑
摘要: Employee表包含所有员工,包括他们的经理。每个员工都有一个 Id,此外还有一列对应的经理Id。 创建表和数据: 解法: 1.通过表的自连接,找出每个员工的经理,筛选出薪水比经理薪水高的员工。 阅读全文
posted @ 2019-10-22 21:46 forever_fortunate 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 编写一个SQL查询,查找至少连续出现三次的所有数字。 创建表和数据: 解法: 1.题目暗示,每行的id是连续的。因此,表三次自连接,将连续三行且数字都相等行选出来。 2.抛开id。仅从行数据考虑,需要用户变量记录前一行数据。当前行数据与前一行数据比较是否相同。 定义两个用户变量: @pre : 前一 阅读全文
posted @ 2019-10-22 21:37 forever_fortunate 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 编写一个 SQL查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。 创建表和数据: 解法: 1.按Id和Score分组。每组中,大于等于每个Score的不同Score数目就是其排名。 优化: 阅读全文
posted @ 2019-10-22 21:17 forever_fortunate 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 编写一个 SQL 查询语句,获取Employee表中第n高的薪水(Salary)。 创建表和数据 解法: 1.对每一个薪水A,只要大于等于A的不同薪水个数等于N即可。 因此子查询求出大于等于A的不同薪水个数B。当B=A时,能得出结果。 2.直接用order by和limit。要注意的是,limit的 阅读全文
posted @ 2019-10-22 21:07 forever_fortunate 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。 创建表和数据: 解法: 1.表自连接 用表的自连接,构造偏序关系。再找次序的最大值,就一定是第二高的薪水。同时,max在没有元组输入时,会返回NULL。如在表中的元组少于2个时。 2.子查询 子查询方法。用子查询找 阅读全文
posted @ 2019-10-22 20:53 forever_fortunate 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 创建表和数据: 解法: 阅读全文
posted @ 2019-10-22 20:40 forever_fortunate 阅读(100) 评论(0) 推荐(0) 编辑