10月12号 leetcode SQL复习

  1. Department Highest Salary

Having 条件是用来筛选group的而不是用来筛选group内部条件的。

  1. Second Highest Salary

查询第二多花费得工资。Limit语句

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

如果不存在这种情况,直接会输出空字符,然而我们想让他输出null
如果遇到NULL的情况
再套一层,因为 select null会返回null

# Write your MySQL query statement below
select
    (Select 
        Distinct Salary SecondHighestSalary 
    From 
        Employee 
        order by Salary Desc
        limit 1,1) as SecondHighestSalary

同理,找到第N高的工资:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  set N=N-1;
  RETURN (
      # Write your MySQL query statement below.
      select
    (Select 
        Distinct Salary SecondHighestSalary 
    From 
        Employee 
        order by Salary Desc
        limit N,1) as SecondHighestSalary
      
  );
END
  1. Swap Salary

update 题目

update Salary 
set 
    sex = if (sex='m','f','m')

推荐使用case when end

UPDATE Salary 
SET sex =
CASE
		sex 
	WHEN 'm' THEN
	'f' ELSE 'm' END;
  1. Rank Scores

rank 排序题目:

select Score,dense_rank() over(order by score desc) as "Rank" from scores

dense_rank()
rank()
over(partition by sth order by sth)

  1. Consecutive Numbers

连续数的思路

select
    distinct l1.num ConsecutiveNums 
From 
    logs l1,
    logs l2,
    logs l3
where
    l1.Num = l2.num and l2.num= l3.num and l1.id =l2.id-1 and l2.id= l3.id-1

inner join的解法

# Write your MySQL query statement below
SELECT
	DISTINCT M.num ConsecutiveNums 
FROM
	(
	SELECT
		l1.id,
		l1.num 
	FROM
		LOGS l1
		INNER JOIN LOGS l2 ON l1.num = l2.num 
		AND l1.id = l2.id - 1 
	) M
	INNER JOIN LOGS l3 ON M.num = l3.num 
	AND M.id = l3.id - 2

分辨好主体

select distinct(l.Num) ConsecutiveNums 
from Logs l 
inner join Logs l2 on l.Num = l2.Num and  l.id = l2.id+1
inner join Logs l3 on l.Num = l3.Num and  l.id = l3.id+2
  1. Exchange Seats

case when的例子:

select 
    (case 
        when id%2=1 and id =(select count(*) from seat) then id
        when id%2=1 then id+1
        else id-1
     end
     ) as id,student
from
    seat
ORDER BY id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值