1141. User Activity for the Past 30 Days I
Analysis
不知道为什么,总是很抗拒描述数据库的题目。
题目大概意思就是统计出活跃用户(2019-07-27 前 30 天内只要有一次活动的都算活跃用户)人数。
Code
首先要思考的第一个问题是如何挑出与 2019-07-27 相差不超过 30 天的数据:1
2
3select *
from Activity as act
where datediff(act.activity_date, '2019-07-27')>-30
也可以写成:1
2
3select *
from Activity as act
where datediff('2019-07-27', act.activity_date)<30
接下来要解决的问题是,挑出出不同的日期:1
2
3
4
5
6select 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
7select 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
4select 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 | select date_id, make_name, count(distinct lead_id) as unique_leads, count(distinct partner_id) as unique_partners |
嗯,这个题跟上个题一样的。
1729. Find Followers Count
Analysis
这个题好像是最简单的。
Code
1 | select user_id, count(distinct follower_id) as followers_count |
Summary
我发现一个问题,如果要是从实际去理解这些题目做法的用意,无疑是没有意义的😂,因为没法搞清楚这样做是为了什么。但是出于做题和熟悉 SQL 语法的目的,按照要求做挑出符合条件的数据就好。另外,查询得到不同的信息后,需要用 GROUP BY 组合到一起,今天的 3 个题都是这样的。