【问题标题】:How to group by every column except a chosen column(s)?除了选定的列之外,如何按每一列分组?
【发布时间】:2022-01-09 01:48:14
【问题描述】:

当我调用如下所示的 GROUP BY 函数时,我经常发现自己有一个很长的列号列表:

SELECT
Field1
,Field2
,Field3
,Field4
,Field5
,Field6
,Field7
,Field8
,Field9
,Field10
,Field11
,Field12
,max(field13)
FROM Data
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12

我有什么办法可以简化这一点,只说明我不想分组的列吗?因此,与上面的不同,它看起来像这样:

SELECT
Field1
,Field2
,Field3
,Field4
,Field5
,Field6
,Field7
,Field8
,Field9
,Field10
,Field11
,Field12
,max(field13)
FROM Data
GROUP BY NOT 13

必须输入所有单独的数字是一个小烦恼,所以如果我能以某种方式简化它会非常方便!

【问题讨论】:

  • 请注意SELECT * 通常与GROUP BY 不兼容。我建议包括实际的选择子句。
  • 我也没有看到任何聚合,为什么要使用 group by?
  • 给出更精确的例子,因为上面的 SQL 脚本不符合逻辑 为什么在简单的 SELECT 中使用 GROUP BY?
  • 抱歉,我已经添加了更清晰的解释。

标签: sql group-by google-bigquery


【解决方案1】:

考虑以下方法

select any_value((select as struct * except(Field13) from unnest([t]))).*,
  max(field13)
from your_table t
group by to_json_string((select as struct * except(Field13) from unnest([t])))      

如果它看起来有点冗长/冗余 - 使用相同的以下版本

select any_value(cols).*, max(Field13)
from (
    select (select as struct * except(Field13) from unnest([t])) cols, Field13
    from your_table t
)
group by to_json_string(cols)

【讨论】:

  • 绝对完美!你终于解决了我几个月来一直在努力解决的问题!
猜你喜欢
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多