An 先前的问题 https://stackoverflow.com/questions/69552492/jooq-multiset-order-result-set-via-conditions-on-multiset涵盖如何使用 jOOQMULTISET_AGG
基于嵌套集合上的聚合函数对查询进行排序的功能:使用GROUP BY
按父表中所有选定的列对查询进行分组,而不是尝试利用MULTISET
.
是否有一种适用于多级集合的方法?我正在使用 PostgreSQL,但显然如果有一种独立于引擎的方法来做到这一点,那就更好了。
例如,如果我有一个使用的嵌套查询MULTISET
:
var results =
create
.select(
ORGANIZATIONS.ID,
ORGANIZATIONS.NAME,
multiset(
select(
DEPARTMENTS.ID,
DEPARTMENTS.NAME,
multiset(
select(EMPLOYEES.ID, EMPLOYEES.SALARY, EMPLOYEES.NAME)
.from(EMPLOYEES)
.where(EMPLOYEES.DEPARTMENT_ID.eq(DEPARTMENTS.ID)))))
.from(DEPARTMENTS)
.where(DEPARTMENTS.ORGANIZATION_ID.eq(ORGANIZATIONS.ID)))
.from(ORGANIZATIONS)
.fetch();
如果我输入一个,我可以轻松地按薪水对每个部门的员工进行排序ORDER BY
在最里面的查询中。
multiset(
select(EMPLOYEES.ID, EMPLOYEES.SALARY, EMPLOYEES.NAME)
.from(EMPLOYEES)
.where(EMPLOYEES.DEPARTMENT_ID.eq(DEPARTMENTS.ID))
.orderBy(EMPLOYEES.SALARY.desc()))))
但是,我如何按最高员工工资对部门列表进行排序,以及按各部门最高员工工资对组织列表进行排序?
改变MULTISET
s into MULTISET_AGG
s并且只做ORDER BY
在查询的顶层,就像前面的问题中只有一层嵌套一样,似乎它在这里不起作用,因为您需要同时按两组不同的列进行分组,而且还因为您不能嵌套聚合函数(至少在 PostgreSQL 上)。