【问题标题】:Combine results from separate columns grouped by a specific column合并按特定列分组的不同列的结果
【发布时间】:2020-04-15 19:43:37
【问题描述】:

在 oracle db 中有这样的表:

+-----+-----+-----+-----+
| VAL1| VAL2| VAL3|  ID |
+-----+-----+-----+-----+
|  A  |     |     |  1  |
-------------------------
|     |  B  |     |  1  |
-------------------------
|     |     |  C  |  1  |
-------------------------
|  X  |     |  Z  |  2  |
-------------------------
|     |  Y  |     |  2  |
-------------------------
|     |  Y  |  Z  |  2  |
-------------------------
|  E  |     |     |  3  |
-------------------------
|     |     |  F  |  3  |
-------------------------

如何从该表中选择(在 ORACLE 中)以获得以下输出,其中所有这些行都按 ID 列分组?

    +-----+-----+-----+-----+
    | VAL1| VAL2| VAL3|  ID |
    +-----+-----+-----+-----+
    |  A  |  B  |  C  |  1  |
    -------------------------
    |  X  |  Y  |  Z  |  2  |
    -------------------------
    |  E  |     |  F  |  3  |
    -------------------------

【问题讨论】:

    标签: sql oracle select


    【解决方案1】:

    你可以使用聚合:

    select id, max(val1) as val1, max(val2) as val2, max(val3) as val3
    from t
    group by id;
    

    【讨论】:

    • 其实 - 这(选择最大)是我这样做的方式,也许你可以提出一个更分析和更干净的方法!?
    • 如果你能定义“更分析”和“干净”,那么我们就有更好的机会!
    • @tv 。 . .很难想出比这更简单的事情了。
    【解决方案2】:

    GROUP BY 与聚合函数结合使用,例如MAX()

    例如:

    select
      max(val1) as val1,
      max(val2) as val2,
      max(val3) as val3,
      id
    from t
    group by id
    

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多