我的表my_table
中有这些数据:
person_id datetime
1 2017-03-02 18:06:20
1 2017-03-02 18:05:10
1 2017-04-01 18:04:09
1 2017-03-02 19:06:50
1 2017-04-01 19:07:22
2 2017-03-03 18:09:15
2 2017-05-03 19:07:05
2 2017-05-03 20:19:08
我需要计算每小时的人数(非唯一)。问题是我应该获得平均计数(几天内的平均值)。
假设今天 18:00 到 19:00 期间有 10 位访客,而昨天同一时间范围内有 5 位访客。那么,这两天的平均参观人数是多少? (10 + 5)/2 = 15/2 = 7.5
我期望这个结果:
person_id HOUR HOURLY_AVG_COUNT
1 18 1.5
1 19 1
1 20 0
2 18 1
2 19 1
2 20 1
我在 Hive 中编写了以下查询,但它计算所有日期每小时的总人数:
SELECT person_id, HOUR(datetime), count(*)
FROM my_table
GROUP BY person_id, HOUR(datetime)
ORDER BY person_id
最佳答案
select person_id
,hour
,avg (hourly_cnt) as hourly_avg_count
from (select person_id
,hour (datetime) as hour
,count(*) as hourly_cnt
from my_table
group by person_id
,hour (datetime)
,date (datetime)
) t
group by person_id
,hour
order by person_id
,hour
;
+-----------+------+------------------+
| person_id | hour | hourly_avg_count |
+-----------+------+------------------+
| 1 | 18 | 1.5 |
| 1 | 19 | 1 |
| 2 | 18 | 1 |
| 2 | 19 | 1 |
| 2 | 20 | 1 |
+-----------+------+------------------+
关于sql - 如何统计每小时平均使用Hive的人数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44922633/