點選上"藍字"關注我們
下圖是一張網站使用者活動表(User_Activities),表中包含字段UserId(使用者編号)、Activity(使用者活動,可取值login、orders、logout)、Date(活動日期),現需要編寫一個查詢語句,統計網站每日的新使用者數量,即統計每日登入使用者中首次登入網站的使用者數。
方法一:
第一步,根據UserId分組查詢,得出每個使用者的最小登入日期即各個使用者首次登入網站的日期。
select UserId,min(Date)as login_date
from User_Activities
where Activity='login'
group by UserId;
查詢結果如下:
第二步,将第一步的查詢結果當做臨時表,分組統計每個login_date的使用者數量。
select login_date,count(UserId)as user_count
from
(
select UserId,min(Date)as login_date
from User_Activities
where Activity='login'
group by UserId
)ua
group by login_date
order by login_date;
最終查詢結果如下:
方法二:
第一步,使用視窗函數rank()對UserId、Date進行分組排名。(視窗函數mysql8.0及以上版本可用)
select *,rank() over(partition by UserId order by Date) as rnk
from User_Activities
where Activity='login';
查詢結果如下:
第二步,篩選排名為1的資料并分組統計每個Date的使用者數量。
select Date as login_date,count(UserId)as user_count
from
(select *,rank() over(partition by UserId order by Date) as rnk
from User_Activities
where Activity='login'
)ua
where rnk=1
group by Date
order by Date;
最終查詢結果如下:
來都來了,點個在看再走吧~~~