Leetcode SQL精选题(八)

238 阅读2分钟

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

最近的做题感觉:

有时候还是有些题目写的出来了,而且感觉手感比之前好多了.
但是还是有个问题,就是在做题目的时候会有点着急,没有把题目的具体问题看明白,或者在做的时候就是做着做着把题目给忘记了!!!

注意注意!这在真的比赛的时候很吃亏的!

35.对表连接之后的统计我觉得你有点欠缺。。

36.审题!!


select

distinct viewer_id as id

from views


group by viewer_id,view_date having count(distinct article_id)>=2

#注意,需要每个人都读了不同的文章,而不是一个文章读了多遍

order by id

37.窗口函数执行顺序

from → on→ join→
where → group by→聚合函数→having→窗口函数→
select +distinct→union→order by →limit

38.思路思路思路!

leetcode.cn/problems/pr…

这题有点难,

在做连接的时候一定要注意,到底是什么主导了连接关系的发送生.

比如说在这里按道理来说左边是没有东西的,但是右边会有.

distinct做的是整一条记录的去重,而不是单个字段的去重

38.三处关键点

select distinct visited_on,sum_amount as amount,round(average_amount,2) as average_amount

from

(

    select visited_on,

        sum(amount) over(order by visited_on rows 6 preceding) as sum_amount,

        avg(amount) over(order by visited_on rows 6 preceding) as average_amount        #avg也可以用窗口

    from(

         select visited_on,sum(amount) as amount

         from Customer

         group by visited_on

         )t1

)t2

where datediff(visited_on,(select min(visited_on)from Customer))>=6        #时间差和where内不能直接用min,因为是先执行where,才有聚合

39.构造表,实现左连接带null

    select distinct spend_date, "desktop" as platform

    from Spending

    union

    select distinct spend_date, "mobile" as platform

    from Spending

    union

    select distinct spend_date, "both" as platform

    from Spending    

40.又看到一个人写的sum妙用

SELECT LEFT( trans_date, 7 ) AS month,

        country,

        count(*) AS trans_count,

        sum( state = 'approved' ) AS approved_count,        #计数用

        sum( amount ) AS trans_total_amount,

        sum( IF ( state = 'approved', amount, 0 ) ) AS approved_total_amount    #统计所有值的总和用

FROM

        transactions

GROUP BY

        country, month
        ```