【发布时间】:2018-07-25 17:41:31
【问题描述】:
这是一个简单的 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 中不可用。
【问题讨论】:
-
不,
group_concat(因此 SQLAlchemy 的func.group_concat()仅在 MySQL 中可用,在 Oracle 中不可用。 -
您使用的是什么版本的 Oracle?
-
我实际上必须安装多个 Oracle,从 11g (rel 2) 到 12c。
-
@xfix 我确实不得不质疑这是一个欺骗目标。尽管 OP 在他们的帖子中引用了它,但它并没有解决他们的问题。根据OP,Oracle中没有GROUP_CONCAT。
标签: python oracle sqlalchemy oracle12c listagg