欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql如何查詢近30天活躍用戶數(shù)

 更新時(shí)間:2024年08月01日 10:33:32   作者:@See?you?later  
這篇文章主要介紹了Mysql查詢近30天活躍用戶數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

思路:

題目要求:統(tǒng)計(jì)截至 2019-07-27(包含2019-07-27),近 30 天的每日活躍用戶數(shù)(當(dāng)天只要有一條活動記錄,即為活躍用戶)

要計(jì)算日期之間的天數(shù),這時(shí)就需要用到DATEDIFF函數(shù)

DATEDIFF(date1,date2):返回date1 - date2的日期間隔天數(shù)

把在時(shí)間要求內(nèi)的篩選出來,再進(jìn)行 用戶id 分組,最后統(tǒng)計(jì)用戶個(gè)數(shù)(去重后的)

解題過程:

先對日期進(jìn)行篩選

SELECT *
FROM activity
WHERE DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29

然后再日期進(jìn)行分組,計(jì)算用戶id,這時(shí)需要對用戶id進(jìn)行去重,若不去重,則會出現(xiàn)以下結(jié)果

SELECT activity_date, COUNT(user_id)
FROM activity
WHERE DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29
GROUP BY activity_date 

所以需要對用戶id進(jìn)行去重處理(COUNT(DISTINCT user_id)保證每個(gè)用戶不相同(或者說重復(fù)出現(xiàn))

踩了個(gè)坑:

WHERE DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29
GROUP BY activity_date

GROUP BY activity_date
HAVING DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29

提出問題,這兩個(gè)mysql語句都可以執(zhí)行成功,但兩者一點(diǎn)問題都沒有嘛?

一個(gè)先過濾后分組,另一個(gè)先分組后過濾。按理說沒毛病啊

但是結(jié)果卻是:

  • 第一個(gè)查詢是正確的,因?yàn)樗褂肳HERE子句來過濾日期范圍,然后使用GROUP BY和COUNT(DISTINCT user_id)來統(tǒng)計(jì)每日活躍用戶數(shù)。
  • 第二個(gè)查詢錯(cuò)誤地將日期范圍過濾放在了HAVING子句中,而沒有使用聚合函數(shù),這不符合SQL語法。
  • 正確的做法是在WHERE子句中指定日期范圍過濾條件,然后使用GROUP BY進(jìn)行分組統(tǒng)計(jì)。

注意:HAVING子句不能獨(dú)立于聚合函數(shù)使用來過濾原始數(shù)據(jù)

更多關(guān)于聚合函數(shù)的要點(diǎn)可以查看MySQL零散拾遺(四)借這個(gè)案例把里面的要點(diǎn)進(jìn)行更進(jìn)一步的闡述說明。

Code

踩坑了

SELECT activity_date day, COUNT(DISTINCT user_id) active_users 
FROM activity
WHERE DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29
GROUP BY activity_date 

到此這篇關(guān)于Mysql查詢近30天活躍用戶數(shù)的文章就介紹到這了,更多相關(guān)Mysql查詢活躍用戶數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論