可以很明显看到是比较繁琐的。
如上,通过 floor 函数,先除以500再乘以500,这样就将数据按照500做了分割,再将这个范围计数使用 group by 聚合,完成了实际的统计。 因此得到的数据0,即表示0-499, 1表示500-999,范围可以随实际数据而变化,比较方便简洁。当然,如果需要的范围不是分散,需要定制的,在少量的情况下, case between 可能更适合些。
以上就是本期的内容,作为一篇 *** 作备忘。
1. Hive SQL 分区间统计问题
时间段统计,可以采用 hour(subscribe_time) 取出小时然后分层。思路:select
uid
,CASE WHEN HOUR(subscribe_time) BETWEEN 0 AND 1 THEN '00:00:00'
WHEN HOUR(subscribe_time) BETWEEN 2 AND 3 THEN '02:00:00'
...
ELSE '23:00:00' END -- 生成时间分层部分,insert前外层sql加上日期后作为唯一的时间值
,COUNT(*)
FROM yht_fans WHERE subscribe_time>=UNIX_TIMESTAMP(CURDATE()) and subscribe_time<=UNIX_TIMESTAMP(CURDATE())+86400
GROUP BY 1,2
SQL好写,但是要说得明白估计很费劲,关于函数就不说明了,百度查;
思路是,将24小时内分为8个区间,分别以0~7表示,0表示3小时内、1表示第6到第三小时内……
以下SQL是统计区间的数量,请参考:
SELECTFLOOR((TIMESTAMPDIFF(SECOND,acquisition_time,NOW()) - 1)/10800) AS section,
COUNT(1)
FROM
co_data_history
WHERE
1 = 1
AND acquisition_time >= DATE_SUB(NOW(),INTERVAL 1 DAY)
AND acquisition_time < NOW()
GROUP BY section
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)