写统计期间sql笔记

场景一:表中时间类型为datetime,统计一天中每小时内的人数。

SELECT
<span style="white-space:pre">	</span>DATE_FORMAT(login_time, '%H') time,
<span style="white-space:pre">	</span>count(DISTINCT(login_name)) countUser,
<span style="white-space:pre">	</span>count(login_name) countUserTotal
FROM
<span style="white-space:pre">	</span>login_log l
WHERE
<span style="white-space:pre">	</span>1 = 1
GROUP BY
<span style="white-space:pre">	</span>HOUR (login_time);


-- 或者


SELECT
<span style="white-space:pre">	</span>DATE_FORMAT(login_time, '%H') time,
<span style="white-space:pre">	</span>count(DISTINCT(login_name)) countUser,
<span style="white-space:pre">	</span>count(login_name) countUserTotal
FROM
<span style="white-space:pre">	</span>login_log l
WHERE
<span style="white-space:pre">	</span>1 = 1
GROUP BY
<span style="white-space:pre">	</span>DATE_FORMAT(login_time, '%H');


1、DATE_FORMAT(date,format) :格式化日期,第一个为日期,第二个为要格式化的形式(规则参考点击打开链接)。

2、count(DISTINCT(login_name)) :根据登陆的用户名统计用户数,同一用户去重。

3、count(login_name) :登陆人次,同一用户不去重。

4、where 1=1 :这样就不用判断后面加条件时候用“where”还是“and”,直接加条件的话就用“and”。

5、HOUR(time) :返回时间的小时部分,返回值的范围为0至23小时的小时值。


场景二:表中时间为datetime,按天统计人数。

同上,只需要把最后HOUR()改为DAY()。


场景三:表中时间为datetime,获取某字段的每一天的和,以每一天为基准7天的和

SELECT
	DATE_FORMAT(a.create_date, '%Y-%m-%d') countDate,
	(
		SELECT
			sum(count)
		FROM
			statistics_user_active
		WHERE
			create_date BETWEEN (DATE_FORMAT(a.create_date, '%Y-%m-%d') - INTERVAL 0 DAY)
		AND a.create_date
--  	and condition_from = 'wonders'
-- 		and condition_user_type = 1
	) AS dau,
	(
		SELECT
			sum(count)
		FROM
			statistics_user_active
		WHERE
			create_date BETWEEN (DATE_FORMAT(a.create_date, '%Y-%m-%d') - INTERVAL 6 DAY)
		AND a.create_date
--  	and condition_from = 'wonders'
-- 		and condition_user_type = 1
	) AS wau
FROM
	statistics_user_active a
where 1=1 
-- and condition_from = 'wonders'
-- and condition_user_type = 1 
group by DATE_FORMAT(a.create_date, '%Y-%m-%d')

;
-- --------------------------
select date_sub(curdate(),interval 6 day);

1、

SELECT
	sum(count)
FROM
	statistics_user_active
WHERE
	create_date BETWEEN (DATE_FORMAT(a.create_date, '%Y-%m-%d') - INTERVAL 6 DAY)
AND a.create_date
sum()求和,筛选条件为between 每一天往前6天 and 今天 
2、select A.a, A.b,(select ......) as wau from ABC A

3、还有其他字段,例如condition_from表明来源,如果要通过来源筛选的话要在“() as”的括号中也加上筛选条件 
4、“INTERVAL”,可以用来获取某天日期,例如“这周第一天”,“这月最后一天”,“下月第一天”等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值