使用group-by时如何将所有列聚合到SQL中的数组中?

How to aggregate all columns into array in SQL when using group-by?

给出一个 table 喜欢:

item vietnamese cost unique_id
fruits trai cay 10 abc123
fruits trai cay 8 foo99
fruits trai cay 9 foo99
fruits trai cay 12 abc123
fruits trai cay 14 abc123
vege rau 3 rr1239
vege rau 3 rr1239

通常当它不是group by时我可以这样做:

SELECT * from mytable

但是如果我用group by对相同项目名称的行进行分组,我不能直接这样做:

SELECT 
item, 
array_agg(vietnamese) as vietnamese
array_agg(cost) as cost
array_agg(unique_id) as unique_id
from mytable
GROUP BY item

是否有自动选择 SQL array_agg(*) 中所有列的选项?

不,没有语法可以执行您描述的操作。例如。 COUNT(*) 并不意味着 COUNT(a), COUNT(b), COUNT(c), …,该上下文中的星号不是指列的扩展。

一般来说,SQL 在元编程方面非常糟糕,即使用运行时信息来修改查询。您不能 select 全部以“a”开头的列,或者匹配某种模式的表格。 SQL 非常静态,只有少数例外,例如 SELECT *.