gpt4 book ai didi

sql - 在 Oracle 中限制 LISTAGG 结果

转载 作者:行者123 更新时间:2023-12-03 14:34:12 28 4
gpt4 key购买 nike

我试图限制我的 SQL 查询中的一列,该列使用 LISTAGG 仅将前 3 行分组为一列。

例如:

Table
-----
Name Orders
---------------
Joe Joe_Order1
Joe Joe_Order2
Joe Joe_Order3
Joe Joe_Order4
Joe Joe_Order5
Joe Joe_Order6
Mark Mark_Order1
Mark Mark_Order2
Mark Mark_Order3
Mark Mark_Order4

让它返回以下...
Name   Recent_Orders
-----------------------------
Joe Joe_Order1, Joe_Order2, Joe_Order3
Mark Mark_Order1, Mark_Order2, Mark_Order3

我可以使用 listagg 连接数据,但是我不完全确定如何将结果限制为前 3 条记录。
SELECT NAME, LISTAGG(Orders, ', ') within group(order by Orders)
as Recent_Orders
FROM
Order_table
GROUP BY
NAME

这可以用 LISTAGG 实现吗?任何帮助将不胜感激。谢谢

最佳答案

在 CTE 中应用 row_number,然后在 WHERE 子句中应用限制

with CTE as
(
select row_number() over(partition by NAME order by Orders) as rn,
a1.*
from Order_Table a1
)
SELECT NAME, LISTAGG(Orders, ', ') within group(order by Orders)
as Recent_Orders
FROM
CTE
WHERE
rn <=3
GROUP BY
NAME

关于sql - 在 Oracle 中限制 LISTAGG 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264297/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com