假设我试图对银行和分行进行分类,其中一家银行通过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;

09-16 23:19