當前位置:首頁 » 編程語言 » 用sql求用戶連續登錄分布
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用sql求用戶連續登錄分布

發布時間: 2023-04-05 19:54:30

『壹』 sql查詢登陸過次數超過10次的用戶

select playerid,count(*) from userlogin group by playerid having count(*)>10

『貳』 近七天內用戶登錄次數sql語句怎麼寫

使用union all合並一個最近七天且統計為0的查詢,利用group by 日期天來統計真實數據,最外層包一個sum求和即可。

『叄』 sql求連續登錄天數

1.使用,第一個作業(以日期為鍵的映射,用戶組輸出。縮減設計: 內部構造一個大小為 n 的列表(作為一個隊列) ,啊(日期是有序的,從小到大)

『肆』 sql面試題1

【1】騰訊面試題

table_A ( 用戶userid和登錄時間time)求連續登錄3天的用戶數

https://www.cnblogs.com/ikww/p/12012831.html

【SQL】查詢連續登陸7天以上的用戶

查詢7天連續登陸用戶這個問題很經典,解決方法也有很多,這里我講一下筆者的方法,希望對大家有幫助。

具體思路:

1、因為每天用戶登錄次數可能不止一次,所以需要先將用戶每天的登錄日期去重。

2、再用row_number() over(partition by _ order by _)函數將用戶id分組,按照登陸時間進行排序。

3、計算登錄日期減去第二步驟得到的結果值,用戶連續登陸情況下,每次相減的結果都相同。

4、按照id和日期分組並求和,篩選大於等於7的即為連續7天登陸的用戶。

表信息如下圖

第一步:用戶登錄日期去重

1select DISTINCT date(date) as 日期,id from orde;

結果為:

第二步:用row_number() over()函數計數

1select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a;

結果為:

第三步:日期減去計數值得到結果

1select *,date(日期)-cum as 結果 from (select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a)b;

結果:

第四步:根據id和結果分組並計算總和,大於等於7的即為連續登陸7天的用戶

1select id,count(*) from (select *,date(日期)-cum as 結果 from (select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a)b)c GROUP BY id,結果 having count(*)>=7;

結果為:

用了多次嵌套查詢,最終得到我們需要的結果。

01

01.還原題目場景 - 建表

select*fromtmp.tmp_last_3_day;

02

02.解決問題關鍵 - 分析

03

03.見證奇跡的時刻 - 實現

  連續3天登錄的用戶id ­­ sql如下:

我們再來看下結果:

04

04.面試反思總結 - 升華

現在看來,其實也不難嘛!思路很重要,有了思路,問題自然迎刃而解(此處有掌聲)。。ps:六師妹說今晚的加雞腿~哈哈

05

05.條條大路通羅馬

其實,方法有很多,上面只是選了一種技巧性比較強的一種。下面也是一種不錯的方法,大佬們肯定還有其他實現方式,歡迎小夥伴們右下角點[在看]評論留言,一起討論,一起進步 ~ go go go ...

【2】滴滴面試題

學生表:tb_student(name:學生姓名,id:學號,class:班級,in_time:入學時間,age:年齡,sex:性別,major:專業)

學生成績表:tb_score(id:學號,course:課程,score:分數)

(1)篩選出2017年入學的「計算機」專業年齡最小的10位同學名單(姓名、學號、班級、年齡)

(2)統計每個班同學各科成績平均分大於80分的人數和人數佔比

select a.class,

count(case when a.avg_score>80 then 1 else null end) as '人數'

count(case when a.avg_score>80 then 1 else null end)/count(a.id) as '人數佔比'

from

(select st.class,sc.id,avg(sc.score) as avg_score

from tb_student st

inner join tb_score sc

on st.id=sc.id

group by 1)a

(1)select st.name,st.id,st.class,st.age

from tb_student st

inner join tb_score sc

on st.id=sc.id

where year(st.in_time)='2017'

and major='計算機'

order by age asc

limit 0,9

(2)

鏈接:https://zhuanlan.hu.com/p/110924684

(1)

selectname,id,class,agefromtb_studentwhereyear(in_time)=2017andmajor='計算機'ORDERBYageASClimit10;

(2)

SELECTa.class,sum(casewhenaaa.x>80then1else0end)asnum_80,(sum(casewhenaaa.x>80then1else0end)/count(*))asproportionfromtb_studentaINNERJOIN(SELECTid,avg(score)asxfromtb_scoreGROUPBYid)asaaaona.id=aaa.idGROUPBYclass;

解析:寫一個子查詢,從score表中得到以學號分組的學生各科平均分。命名為aaa,將其與學生表內聯結。再以class分組,得到以class分組的各班學生的平均分,最後通過case語句,sum聚合函數得到平均分>80分的計數,和所佔各班總人數比例。

case語句也可以用if語句來代替

寫法2:

SELECTa.class,count(if(aaa.avg>80,true,null))asnumover80,count(if(aaa.avg>80,true,null))/count(a.id)astotalfromtb_studentaINNERJOIN(SELECTid,avg(score)asxfromtb_scoreGROUPBYid)asaaaona.id=aaa.idGROUPBYclass;

『伍』 查連續5天登陸的用戶,sql怎麼寫

  1. 新增用戶登陸日誌表(id、user_id、login_time、login_date);

  2. 用戶表新增連續登陸天數欄位(continuous_days);

  3. 用戶每次登陸往登陸日誌表insert記錄,並且查看昨天是否有登陸記錄,如果昨天登陸記錄大於0,則連續登陸天數+1,否則將連續登陸天數置為0;

  4. sql語句:select * from user wherecontinuous_days > 5;

『陸』 如何用SQL解決連續幾天的問題

統計下用戶最長連續登錄的天數」,「統計下連續登錄超過10天的用戶」,「統計下連續3天交易額超過100W的店鋪

1. 連續兩天購買的用戶

先按照date將一天多次進行去重

row1:按照Date分組,time排序

row2:按照Date和ID分組,time排序

按照ID、row2-row1 分組,重復次數大於1

2. 比如連續2次購買的用戶() 

row1:按照  time排序

row2:按照 ID 分組,time排序

按照ID、row2-row1 分組,重復次數大於1

2. 連續2次購買蘋果的用戶

row1:按照 time排序

row2:按照ID、商品類型分組,time排序

按照ID、商品類型分組,重復次數大於1

3. 連續2次在淘寶購買蘋果的用戶

row1:按照 time排序

row2:按照ID、商品類型、店鋪分組,time排序

按照ID、商品類型、店鋪分組,重復次數大於1

『柒』 有一張表記錄了用戶登錄的id和時間,怎麼找出每一個用戶連續登錄的天數

1、使用MR,第一個job(map以日期為key,對用戶進行分組輸出。rece設計:內部構造一個以N容量大小的列表(作為隊列),模擬一下啊(日期過來就是有序的,從小到大)

『捌』 sql怎樣統計不同用戶登錄的相同次數的用戶數

1000個用戶中:
0次登陸的用戶數990
1次登陸的用戶數2
5次登陸的用戶數5
7次登陸的用戶數3
-------------------------------------------------
用戶表users結構:
用戶名 密碼 login
------------------------------------------------

原理:最低用戶登陸的次數為0,最大為MAX所返回的值。順序查詢登陸次數相同的用戶數,是用Count函數得出。依次輸出結果。

declare @tmax int,@tmin int

set @tmax=(select max(login) from users)--獲取登陸最大次數
set @tmin=(select min(login) from users)--獲取登陸最小次數,可選語句,或設置為0
--循環統計結果
--set @tmax=125
print '最小登錄次數為'+Convert(varchar,@tmin)
print '最大登錄次數為'+Convert(varchar,@tmax)
print '--------------明細-------------------'
declare @current int,@countUser int
set @current=@tmin;
While(@current<=@tmax)
Begin
Select @countUser=Count(*) From users Where login=@current --查登陸次數為current的用戶數
if(@countUser>0) print Convert(varchar,@current)+'次登陸的用戶數'+Convert(varchar,@countUser)
--上一個語句只輸出有意義的數據結果
set @current=@current+1
End