使用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 *
.
给出一个 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 *
.