mysql listagg within,在SQLAlchemy中是否有一个LISTAGG WITHIN GROUP等效项?

Here is a simple Oracle table:

+-----------+---------+

| food | person |

+-----------+---------+

| pizza | Adam |

| pizza | Bob |

| pizza | Charles |

| ice cream | Donald |

| hamburger | Emma |

| hamburger | Frank |

+-----------+---------+

And here are the results of an aggregated SELECT I'd like to do:

+-----------+------------------+

| food | people |

+-----------+------------------+

| hamburger | Emma,Frank |

| ice cream | Donald |

| pizza | Adam,Bob,Charles |

+-----------+------------------+

With Oracle 11g+ this is easy enough with a LISTAGG:

SELECT food, LISTAGG (person, ',') WITHIN GROUP (ORDER BY person) AS people

FROM mytable

GROUP BY food;

But I haven't been able to find a way to do this within SQLAlchemy. An old question from Stack Overflow shows where someone was trying to implement a custom class to do the job, but is that really the best option there is?

MySQL has a group_concat feature, and thus this questioner solved his problem with func.group_concat(...). Sadly that function is not available within Oracle.

解决方案In [7]: func.listagg(column('person'), ',').within_group(column('person'))

Out[7]:

In [8]: print(_.compile(dialect=oracle.dialect()))

listagg(person, :listagg_1) WITHIN GROUP (ORDER BY person)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值