Leetcode SQL精选题(九)

109 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。
哎,最近小铭和我闹别扭了,小铭你不要离开我啊5555555555看😫😥

我对她说的几句话印象比较深:

1.我怕我会爱上你 (第一次浴缸里)
2.当初我就不应该来 (上一次浴缸里)
3.我怕我会原谅你(泰国火锅吃饭的时候)
5555小铭我想你

前几天你妹去上学,我感觉好像是我去上大学一样,不知道你在家里是不是很孤独,小可怜.我最近干的事情我错啦,我以后再也不会了!!!

41.一个表,有时候是左列有时候是右列,挑选你需要的值的两种方法

select distinct

        case when user1_id = 1 then user2_id

        when user2_id = 1 then user1_id

        end as user1friend

    from Friendship

select

user2_id as friend

from

friendship where user1_id='1'




union




select


user1_id as friend

from

friendship where user2_id='1'


42.如果,需要让原本的所有数值都出现,如果没有也需要出现,可以考虑两种方法:

1.先提取出所有出现过的,然后再连接

right join

(

    select distinct sub_id from submissions where parent_id is null

) t2

2.直接做自连接

SELECT s1.sub_id AS post_id,IFNULL(COUNT(DISTINCT s2.sub_id),0) AS number_of_comments

FROM Submissions s1 LEFT JOIN Submissions s2

ON s1.sub_id = s2.parent_id

where s1.parent_id is null #如果用AND会出错GROUP BY s1.sub_id

ORDER BY s1.sub_id

43.having中的错误写法

select

*

from orders

group by seller_id

having order_date <> min(order_date)

44.找寻第二大:直接用dense_rank()!!!别的表in来in去都是些**做法

select

u.user_id as seller_id,

if(t2.item_brand=u.favorite_brand,'yes','no') as  2nd_item_fav_brand

from

users u left join

(

select

*

from

(

select

seller_id,

item_id,

dense_rank() over(partition by seller_id order by order_date asc) as rk

from orders

)t1 join items using(item_id)

where rk=2

)t2


#这里是所有的第二件商品

on u.user_id=t2.seller_id


45.avg妙用:

round(sum(if(rating<3,1,0))/count(*)*100,2) poor_query_percentage #与下面的那句话有相同的语义

ROUND(avg(rating < 3) * 100,2) poor_query_percentage    #其中统计的是rating<3的答案0或者是1的个数