listagg - 多个按列分组
Posted
技术标签:
【中文标题】listagg - 多个按列分组【英文标题】:listagg - multiple group by columns 【发布时间】:2015-02-09 19:45:49 【问题描述】:我使用LISTAGG
来处理很多列。
所以我必须做GROUP BY
所有这些列。
有没有更整洁的方法来做到这一点?
喜欢 'group by all minus listagg...' ?
【问题讨论】:
你能发布一些示例代码吗? 没有更整洁的方式。您必须列出 GROUP BY 子句中的所有列(常量、聚合和一些表达式除外)。 【参考方案1】:您有示例表吗?你在加入表格吗?此示例使用连接,但 LISTAGG 列不在 group by 语句中。
这是我为另一个我编辑的问题所做的示例。
SQL Fiddle
SELECT c.id,
c.model,
LISTAGG(d.name, ',')
within GROUP (ORDER BY d.name) AS "Drivers",
LISTAGG(c.color, ',')
within GROUP (ORDER BY c.color) AS "Colors"
FROM TBLCARS c
join TBLDRIVERS d
ON c.id = d.fid_tblcars
GROUP BY c.id,
c.model
ORDER BY c.id
这是一个使用 WITH 子句的方法,您可以使用 CTE 并构建更大的查询。
WITH cte
AS (SELECT c.id,
LISTAGG(c.color, ',')
within GROUP (ORDER BY c.color) AS "Colors",
LISTAGG(c.model, ',')
within GROUP (ORDER BY c.model) AS "Model",
LISTAGG(d.name, ',')
within GROUP (ORDER BY d.name) AS "Name"
FROM TBLCARS c
join TBLDRIVERS d
ON c.id = d.fid_tblcars
GROUP BY c.id)
SELECT *
FROM cte
SQL FIDDLE WITH
【讨论】:
我希望拒绝我答案的人能解释原因。我对 Oracle SQL 的经验很少,但我的答案出现在轨道上,因为我使用 LISTAGG,而 GROUP BY 语句中没有这些列。我没有任何示例代码,所以我尽力而为。任何有关原因的信息都将有助于将来的参考。谢谢。 谢谢你的问题。 我投了反对票。您的 SQL 没有什么特别的问题,但它没有回答问题。以上是关于listagg - 多个按列分组的主要内容,如果未能解决你的问题,请参考以下文章
使用 LISTAGG 获取值,但避免对内连接中使用的表进行分组