175.组合两个表

题目

Code

SELECT FirstName, LastName, City, State
FROM Person LEFT JOIN Address --由于需要Person表的所有信息,所以使用左联结
ON Person.PersonId = Address.PersonId;

on和where的区别:

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用left join时,on和where条件的区别如下:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

176. 第二高的薪水

题目

code

SELECT
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1) AS SecondHighestSalary;

要创建一个新表,存储可能只有一行的数据

LIMIT和LIMIT OFFSET的区别

select * from table limit 2,1;

//跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据

select * from table limit 2 offset 1;

//从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条

177. 第N高的薪水

题目

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET n = N-1;
RETURN (
# Write your MySQL query statement below.
SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT n,1
);
END

178. 分数排名

SELECT s1.Score, COUNT(DISTINCT(s2.score)) RANK
From Scores s1, Scores s2
WHERE s1.score <= s2.score
GROUP BY s1.Id
ORDER BY Rank;

窗口函数

<窗口函数> OVER ([partition by <列清单>]
ORDER BY <排序用列清单>)

比如,按照产品类型(product_type)分类,在每个分类中按照价格(sale_price)排序,并将排序结果写入新列ranking中。

SELECT product_name, product_type, sale_price,
RANK() OVER (PARTITION BY product_type
ORDER BY sale_price) AS ranking
FROM Product;

180. 连续出现的数字

题目

代码

case when

SELECT DISTINCT Num AS ConsecutiveNums
FROM (
SELECT Num,
CASE
WHEN @prev = Num then @count := @count+1
WHEN (@prev := Num) is not null then @count := 1
END AS CNT
FROM Logs, (SELECT @prev := null, @count := null) as t
) AS temp
WHERE temp.CNT >= 3;

181. 超过经理收入的员工

方法一:创建两个虚拟表

代码

SELECT A.Name as Employee
FROM Employee A, Employee B
WHERE A.ManagerId = B.Id
AND A.Salary > B.Salary;

方法二:自联结

代码

SELECT A.Name AS Employee
FROM Employee A JOIN Employee B
ON A.ManagerId = B.Id
AND A.Salary > B.Salary;

182. 查找重复的电子邮箱

题目

Code

SELECT Email
FROM Person
GROUP BY Email
HAVING COUNT(Email) > 1;

最新文章

  1. web前端基础知识-(八)Ajax
  2. 【oracle】oracle学习笔记2--scoot账户的激活与解锁
  3. JSP-JSTL学习
  4. [android]AndroidInject框架——我的第一个android小型框架
  5. JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总
  6. Program D--贪心-区间覆盖
  7. equals函数
  8. JQUERY 选择
  9. 利用未文档化API:RtlAdjustPrivilege 提权实现自动关机
  10. Vue2.0 从零开始--搭建环境
  11. 【BZOJ2431】逆序对数列(动态规划)
  12. C++关联容器知识总结
  13. 浅谈Java中的equals和==与hashCode
  14. 解决Python图片处理模块pillow使用中出现的问题
  15. mass
  16. mysql+redis+memcached
  17. SWUST OJ(963)
  18. Docker 入门(Mac环境)- part 2 容器(container)
  19. SQL之mysql常用操作语句(入门级)
  20. linux c编程调用系统的动态库时,要使用dlopen等函数吗?

热门文章

  1. mysql表关系
  2. hexo-next-travis-ci 构建自动化部署博客
  3. arm-eabi-addr2line工具跟踪Android调用堆栈
  4. C#使用正则表达式获取HTML代码中a标签里包含指定后缀的href的值
  5. 94-datetmie模块
  6. tomcat启动出现问题,有待解决
  7. iview 和 Elemet UI 源码比较
  8. JAVA Integer值的范围
  9. SpringBoot1.5.10.RELEASE整合druid时,在druid monitor界面出现(*) property for user to setup
  10. CVE-2020-1947 Sharding-UI的反序列化复现及分析