Leetcode SQL精选题(四)

57 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在这里先写一下最近的MySQL刷题感受:

不足之处:

1.在做题目的时候没有仔细验证答案的结果和准确性,只是简单地和答案进行比较
2.没有做到很好地查看题目,只是一个劲做
3.对于一些特别的函数没有用到很多,如date_format和datediff

19.会不会返回null?

一般select不到结果会返回null 如果是条件限制,那么行被删去,什么都不会返回

如果是这样,如果没有查询到就会返回一个空:


select

if(num,num,null) as num #即使是这样也不行

from mynumbers

group by num having count(*)=1

order by num desc limit 1

如果想要返回null,直接在外面再套一个select 即可~!

select

(

select

num

from mynumbers

group by num having count(*)=1

order by num desc limit 1

) as num

20.一种group by的简单写法

select customer_id from Customer

group by customer_id

having count(distinct product_key) = (select count(distinct product_key) from Product)

##注意!!!!

#distinct后面不能带* !!!!!

21.inner join 和left join的区别:

如果没有这个行,那么inner join不会有任何返回值(有on的情况下);若inner join后面没有跟上on,则会产生笛卡尔积

如果没有这个行, left join 会返回左边表的值

22.如果装不上max:

select max(sum(price)) cnt from sales group by seller_id--->这样的用法是错误的

all(select sum(price) cnt from sales group by seller_id)---->这样是对的,相当于一种变通的写法

23.datediff

datediff(日期1, 日期2): 得到的结果是日期1与日期2相差的天数。 

1.如果日期1比日期2大,结果为正;

2.如果日期1比日期2小,结果为负。

24.一个比之前所有的日期都要短的时间:


select id

from weather

where (id,temperature) in(

select 

id,

max(temperature) over(order by recorddate )

from 

weather

)

and id<>1 #如果没有这句话会导致第一天总是会比其所有的日子温度高(因为根本就没有数据)