如何使用Ebean通过子查询实现按关联表列总和降序排序实体?
解决方案
嘿,这问题我熟!要实现将entities表中的实体按other_table表对应amount列的总和降序排列,你可以通过分组聚合+关联查询的方式搞定,具体SQL代码如下:
SELECT e.* FROM entities e LEFT JOIN ( -- 先计算每个实体对应的amount总和 SELECT entity_id, SUM(amount) AS total_amount FROM other_table GROUP BY entity_id ) ot ON e.id = ot.entity_id -- 按总和降序排列,若总和相同可按实体id补充排序(可选) ORDER BY ot.total_amount DESC, e.id;
代码说明
- 子查询部分:对
other_table按entity_id分组,用SUM(amount)计算每个实体的总金额,命名为total_amount - 关联查询:使用
LEFT JOIN关联entities表,这样即使某些实体在other_table中没有对应记录(总金额为NULL),也会被保留在结果中;如果只需要保留有金额记录的实体,把LEFT JOIN换成INNER JOIN即可 - 排序规则:通过
ORDER BY ot.total_amount DESC实现按总金额降序排列,后面的e.id是可选的,用于当多个实体总金额相同时保证排序的稳定性
内容的提问来源于stack exchange,提问作者didil




