Leetcode_10 天 SQL 入门_day7

em,今天的主题是计算函数啊。

1141. User Activity for the Past 30 Days I

Analysis

不知道为什么,总是很抗拒描述数据库的题目。
题目大概意思就是统计出活跃用户(2019-07-27 前 30 天内只要有一次活动的都算活跃用户)人数。

Code

首先要思考的第一个问题是如何挑出与 2019-07-27 相差不超过 30 天的数据:

1
2
3
select *
from Activity as act
where datediff(act.activity_date, '2019-07-27')>-30

也可以写成:

1
2
3
select *
from Activity as act
where datediff('2019-07-27', act.activity_date)<30

接下来要解决的问题是,挑出出不同的日期:

1
2
3
4
5
6
select distinct activity_date as day
from (
select *
from Activity as act
where datediff(act.activity_date, '2019-07-27')>-30
) as t1

注意,派生表必须要命名,而且必须要写在外面。此时,得到的结果只有符合条件的日期,还需要统计不同 id 的用户个数,使用 COUNT 可以完成统计,再用 GROUP BY 组合就可以了:

1
2
3
4
5
6
7
select distinct activity_date as day, count(distinct user_id) as active_users
from (
select *
from Activity as act
where datediff(act.activity_date, '2019-07-27')>-30
) as t1
group by activity_date

em,实际上,可以不写那么麻烦:

1
2
3
4
select activity_date as day, count(distinct user_id) as active_users
from Activity
where datediff('2019-07-27', Activity.activity_date) < 30
group by activity_date

1693. Daily Leads and Partners

Analysis

按照日期找出不同产品销售时不同的 lead_id 和 partner_id。

Code

1
2
3
select date_id, make_name, count(distinct lead_id) as unique_leads, count(distinct partner_id) as unique_partners
from DailySales
group by date_id, make_name

嗯,这个题跟上个题一样的。

1729. Find Followers Count

Analysis

这个题好像是最简单的。

Code

1
2
3
4
select user_id, count(distinct follower_id) as followers_count
from Followers
group by user_id
order by user_id

Summary

我发现一个问题,如果要是从实际去理解这些题目做法的用意,无疑是没有意义的😂,因为没法搞清楚这样做是为了什么。但是出于做题和熟悉 SQL 语法的目的,按照要求做挑出符合条件的数据就好。另外,查询得到不同的信息后,需要用 GROUP BY 组合到一起,今天的 3 个题都是这样的。


Buy me a coffee ? :)
0%