【问题标题】:Any way to achieve coalesce row wise?有什么方法可以明智地合并行吗?
【发布时间】:2019-07-18 16:04:23
【问题描述】:

我有一张桌子

| ID  |  V1  |  V2   |   
| 100 |  1   |  1    |
| 100 | null |  1    |
| 101 | null |  null |
| 101 |  1   |  1    |
| 102 |  1   |  null |
| 102 |  1   |  null |

需要的样本输出:

ID 100 在至少其中一行中具有 V1 值,因此需要 1

对于 ID 101 相同,至少其中一行具有 V1 值,因此需要 1

ID 102 在两行中都没有 V2 值,所以需要为空

需要的输出

| ID  |  V1  |  V2   |
| 100 |  1   |  1    |
| 101 |  1   |  1    |
| 102 |  1   |  null |

试图将这些值组合成一个列表并获得最大值

有没有更简单的功能可以做到这一点?

【问题讨论】:

  • 如果你的ID 102有1和2作为V1值,你需要哪一个?
  • 为什么不 max() 和 GROUP BY?这对我来说似乎很容易。
  • 永远不会像 v1 和 v2 的值只有 1 和 null
  • @JNevill 是的,它会起作用,我想知道是否有任何功能
  • 这不仅是因为不能保证您可以向数据库授予该列的每一行都将具有空值或完全相同的值。就像没有办法说“如果您在此列中遇到的每个值都不是任何值或某个单独的不同值,则按列表打印出该组的单个不同值”。相反,您选择一个符合您要求的聚合公式并使用它。在这种情况下,您可以使用 maxminavg,因为这无关紧要。

标签: sql hive impala


【解决方案1】:
select ID, max(V1) as V1, max(V2) as V2 from table group by ID;

【讨论】:

  • 是的,这项工作想知道是否有像 coalesce 这样的函数对行进行排序
  • @SantoshSantu 这样的函数是聚合或分析。最小值、最大值、collect_set、avg 等
【解决方案2】:

你可以做聚合:

select id, max(v1) as v1, max(v2) as v2
from table t
group by id;

【讨论】:

  • 是的,这项工作想知道是否有像 coalesce 这样的函数对行进行排序
猜你喜欢
  • 2020-03-06
  • 2010-11-12
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多