Mysql如何查詢近30天活躍用戶數(shù)
思路:
題目要求:統(tǒng)計(jì)截至 2019-07-27(包含2019-07-27),近 30 天的每日活躍用戶數(shù)(當(dāng)天只要有一條活動(dòng)記錄,即為活躍用戶)
要計(jì)算日期之間的天數(shù),這時(shí)就需要用到DATEDIFF函數(shù)
DATEDIFF(date1,date2):返回date1 - date2的日期間隔天數(shù)
把在時(shí)間要求內(nèi)的篩選出來(lái),再進(jìn)行 用戶id 分組,最后統(tǒng)計(jì)用戶個(gè)數(shù)(去重后的)
解題過(guò)程:
先對(duì)日期進(jìn)行篩選
SELECT *
FROM activity
WHERE DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29
然后再日期進(jìn)行分組,計(jì)算用戶id,這時(shí)需要對(duì)用戶id進(jìn)行去重,若不去重,則會(huì)出現(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 
所以需要對(duì)用戶id進(jìn)行去重處理(COUNT(DISTINCT user_id)保證每個(gè)用戶不相同(或者說(shuō)重復(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提出問(wèn)題,這兩個(gè)mysql語(yǔ)句都可以執(zhí)行成功,但兩者一點(diǎn)問(wèn)題都沒(méi)有嘛?
一個(gè)先過(guò)濾后分組,另一個(gè)先分組后過(guò)濾。按理說(shuō)沒(méi)毛病啊
但是結(jié)果卻是:
- 第一個(gè)查詢是正確的,因?yàn)樗褂肳HERE子句來(lái)過(guò)濾日期范圍,然后使用GROUP BY和COUNT(DISTINCT user_id)來(lái)統(tǒng)計(jì)每日活躍用戶數(shù)。
- 第二個(gè)查詢錯(cuò)誤地將日期范圍過(guò)濾放在了HAVING子句中,而沒(méi)有使用聚合函數(shù),這不符合SQL語(yǔ)法。
- 正確的做法是在WHERE子句中指定日期范圍過(guò)濾條件,然后使用GROUP BY進(jìn)行分組統(tǒng)計(jì)。
注意:HAVING子句不能獨(dú)立于聚合函數(shù)使用來(lái)過(guò)濾原始數(shù)據(jù)
更多關(guān)于聚合函數(shù)的要點(diǎn)可以查看MySQL零散拾遺(四)借這個(gè)案例把里面的要點(diǎn)進(jìn)行更進(jìn)一步的闡述說(shuō)明。
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql時(shí)區(qū)的幾種問(wèn)題及解決方法
在使用MySQL時(shí),時(shí)區(qū)設(shè)置容易引發(fā)一些錯(cuò)誤,本文將介紹MySQL時(shí)區(qū)問(wèn)題可能引發(fā)的錯(cuò)誤,并提供一些解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
安裝配置Zabbix來(lái)監(jiān)控MySQL的基本教程
這篇文章主要介紹了安裝配置Zabbix來(lái)監(jiān)控MySQL的基本教程,Zabbix擁有web頁(yè)面端顯示數(shù)據(jù)的功能,文中的安裝環(huán)境為CentOS系統(tǒng),需要的朋友可以參考下2015-12-12
Advanced Pagination for MySQL(mysql高級(jí)分頁(yè))
看到葉金榮的一篇關(guān)于mysql分頁(yè)的文章,結(jié)合雅虎之前發(fā)的一篇PDF 談?wù)勛约旱目捶?/div> 2016-08-08
關(guān)于Mysql查詢帶單引號(hào)及插入帶單引號(hào)字符串問(wèn)題
本文主要介紹的是用mysql_real_escape_string對(duì)用戶提交的表單數(shù)據(jù)進(jìn)行轉(zhuǎn)義處理和通過(guò)addslashes以及mysql_escape_string這3個(gè)類似功能的函數(shù)用法區(qū)別2013-04-04
使用YUM在Linux(CentOS 7)下安裝mysql 5.7.18的教程詳解
這篇文章主要介紹了使用YUM在Linux(CentOS 7)下安裝mysql 5.7.18的教程詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
PureFTP借助MySQL實(shí)現(xiàn)用戶身份驗(yàn)證的操作教程
這篇文章主要介紹了PureFTP借助MySQL實(shí)現(xiàn)用戶身份驗(yàn)證的操作教程,就像普通程序中的用戶注冊(cè)功能那樣為用戶登陸數(shù)據(jù)信息建立一個(gè)數(shù)據(jù)庫(kù)來(lái)進(jìn)行驗(yàn)證,需要的朋友可以參考下2015-12-12最新評(píng)論

