假设我试图对银行和分行进行分类,其中一家银行通过branches.bank_id
有多个分行。每个分支都有一个awesomeness因子branches.awesomeness
。
我该如何构造一个查询,返回按最不出色的分行排序的银行列表?
我有以下资料:
SELECT * FROM `banks`
INNER JOIN `branches` ON `branches`.`bank_id` = `banks`.`id`
GROUP BY `banks`.`id`
ORDER BY `branches`.`awesomeness` ASC;
当我尝试这样做时,其信息与任何给定银行分组的分行都不是最棒的分行(这是在删除
GROUP BY
语句的结果中显示最早的分行)。我该怎么做呢?
这是与Rails一起使用的,因此如果使用arel风格的语法或考虑Rails的特定需求更为方便,可以随意地将它们放入其中。
最佳答案
我不明白如果您还想获取分支数据,为什么要使用GROUP BY
。
从查询中删除GROUP BY
,并将排序更新为:ORDER BY branches.bank_id, branches.awesomeness
如果不支持分组,请使用MIN()
聚合函数为每个组获取最小的awesomeness。ORDER BY MIN(branches.awesomeness) ASC;
更新:如果您希望两者兼而有之,并且希望按“最小awesomeness”对银行进行排序,并按awesomeness自身对银行中的分行进行排序,请使用以下查询:
SELECT b.*, r.*, brs.MinAw
FROM banks b
INNER JOIN branches r ON r.bank_id = b.id
INNER JOIN (
SELECT bank_id, MIN(awesomeness) MinAw
FROM branches
GROUP BY bank_id
) brs ON b.id = brs.bank_id
ORDER BY brs.MinAw, r.awesomeness;