python-SQLAlchemy中是否有LISTAGG WITHIN GROUP等效项?
作者:互联网
这是一个简单的Oracle表:
+-----------+---------+
| food | person |
+-----------+---------+
| pizza | Adam |
| pizza | Bob |
| pizza | Charles |
| ice cream | Donald |
| hamburger | Emma |
| hamburger | Frank |
+-----------+---------+
这是我想执行的汇总SELECT的结果:
+-----------+------------------+
| food | people |
+-----------+------------------+
| hamburger | Emma,Frank |
| ice cream | Donald |
| pizza | Adam,Bob,Charles |
+-----------+------------------+
使用Oracle 11g,使用LISTAGG可以轻松实现:
SELECT food, LISTAGG (person, ',') WITHIN GROUP (ORDER BY person) AS people
FROM mytable
GROUP BY food;
但是我还无法在SQLAlchemy中找到实现此目的的方法. old question from Stack Overflow显示某人在尝试实现自定义类来完成工作的位置,但这真的是最好的选择吗?
MySQL具有group_concat功能,因此this questioner通过func.group_concat(…)解决了他的问题.遗憾的是,该功能在Oracle中不可用.
解决方法:
从version 1.1开始,您可以使用FunctionElement.within_group(*order_by)
:
In [7]: func.listagg(column('person'), ',').within_group(column('person'))
Out[7]: <sqlalchemy.sql.elements.WithinGroup object at 0x7f2870c83080>
In [8]: print(_.compile(dialect=oracle.dialect()))
listagg(person, :listagg_1) WITHIN GROUP (ORDER BY person)
标签:oracle12c,listagg,oracle,sqlalchemy,python 来源: https://codeday.me/bug/20191109/2012918.html