sql - 如何统计每小时平均使用Hive的人数?

标签 sql hive

我的表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/

相关文章:

java - 从表中删除列表中不存在 id 的记录,保留现有记录并插入表中不存在的记录

java - Hive、JDBC、TTransportException : SASL authentication not complete

hadoop - 使用STRUCT进行的此简单Hive查询的语法错误在哪里?

hadoop - 在Hive SQL中使用Insert into时限制文件编号

mysql - 选择所有未标记为隐藏的帖子

mysql - 具有多重查找的条件别名

mysql - 使用外键完成字段

sql - 我如何违反此约束?

shell - .hivelog 和 .out 使用的区别

hadoop - 使用多字符分隔符创建 HIVE 表