将计数行视为查询结果中的列

Posted

技术标签:

【中文标题】将计数行视为查询结果中的列【英文标题】:View count rows as columns in query result 【发布时间】:2016-09-21 01:03:40 【问题描述】:

第一件事:我能够以一种方式获取数据。我的目的是增加查询结果的可读性。我正在寻找是否可能。

我有一张由设备馈送的桌子。我想获取按两个相同列分组的每小时发送的数据数量。需要对这两列进行分组以确定一种设备类型。 表结构如下:

| identifier-1 | identifier-2 | day        | hour | data_name | data_value |
|--------------|--------------|------------|------|-----------|------------|
|  type_1      | subType_4    | 2016-08-25 | 0    | Key-30    | 4342       |
|--------------|--------------|------------|------|-----------|------------|
|  type_3      | subType_2    | 2016-08-25 | 0    | Key-50    | 96         |
|--------------|--------------|------------|------|-----------|------------|
|  type_6      | subType_2    | 2016-08-25 | 1    | Key-44    | 324        |
|--------------|--------------|------------|------|-----------|------------|
|  type_2      | subType_1    | 2016-08-25 | 1    | Key-26    | 225        |
|--------------|--------------|------------|------|-----------|------------|

我将使用一个由所有设备发送的特定 data_name,获取此 data_name 的计数将为我提供每小时发送的数据。可以按标识符 1、标识符 2、日期和小时分组获得 24 行中的数字。但是,它们会针对每种设备类型重复。

| identifier-1 | identifier-2 | day        | hour | count |
|--------------|--------------|------------|------|-------|
|  type_6      | subType_2    | 2016-08-25 | 0    |  340  |
|--------------|--------------|------------|------|-------|
|  type_6      | subType_2    | 2016-08-25 | 1    |  340  |
|--------------|--------------|------------|------|-------|
|--------------|--------------|------------|------|-------|
|  type_1      | subType_4    | 2016-08-25 | 0    |  32   |
|--------------|--------------|------------|------|-------|
|  type_1      | subType_4    | 2016-08-25 | 1    |  30   |
|--------------|--------------|------------|------|-------|
|--------------|--------------|------------|------|-------|
|--------------|--------------|------------|------|-------|

我想这样查看结果:

| identifier-1 | identifier-2 | day        | count_of_0 | count_of_1 |
|--------------|--------------|------------|------------|------------|
|  type_6      | subType_2    | 2016-08-25 | 340        |  340       |
|--------------|--------------|------------|------------|------------|
|  type_1      | subType_4    | 2016-08-25 | 32         |  30        |
|--------------|--------------|------------|------------|------------|
|--------------|--------------|------------|------------|------------|

在 SQL 中,可以在结果中获取子查询和列,但在 Hive 上是不可能的。我猜它被称为相关子查询。

Hive column as a subquery select 这个问题的答案对我不起作用。

您有什么想法或建议吗?

【问题讨论】:

感谢您编辑我的问题 :) 【参考方案1】:

您可以使用条件聚合来做到这一点:

select identifier1, identifier2, day,
       sum(case when hour = 0 then data_value else 0 end) as cnt_0,
       sum(case when hour = 1 then data_value else 0 end) as cnt_1
from t
where data_name = ??
group by identifier1, identifier2, day
order by identifier1, identifier2, day

【讨论】:

这给了我想要的确切视图。再次感谢:-)

以上是关于将计数行视为查询结果中的列的主要内容,如果未能解决你的问题,请参考以下文章

将具有日期格式的列中的所有行转换为文本格式

将查询结果插入 mysql 中的列时,无法从发送到 GEOMETRY 字段的数据中获取几何对象

是否有python代码可以从数据框中的列中转移和总计/计数数据

将 Spark Dataframe 中的多个列发送到外部 API 并将结果存储在单独的列中

对于要求,我需要通过从该数据帧的列中的列表中的值创建行来将数据帧转换为 [重复]

对所有具有 null 的列进行取消透视