You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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_tableentity_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

火山引擎 最新活动