我想在SQLAlchemy中模拟collect_set
的行为(使用MySQL连接器)。即,组A 1,2,3
与2,1,3
相同。我有以下代码:
res = db.session \
.query(T1.col1.label('col1'), func.group_concat(T1.col2.distinct()).label('col2_group')) \
.group_by(T1.col1) \
.all()
但是,默认情况下,SQLAlchemy不会对组中的值进行排序,因此可能会出现重复项。
有没有办法模拟collect_set
行为?
答案 0 :(得分:1)
不幸的是,SQLAlchemy有官方aggregate ORDER BY support for Postgresql only。您仍然可以使用generic op()
运算符函数在其他方言中表达它,虽然有点hackish:
func.group_concat(T1.col2.distinct().op("ORDER BY")(T1.col2))
将编译为类似
的内容group_concat(DISTINCT t1.col2 ORDER BY t1.col2)