Sql 如何让小组成员选择“最早”的结果?
假设我试图对银行和分行进行分类,其中一家银行通过branchs.Bank\u id有多个分行。每个分行都有一个awesomeness factor branchs.awesomeness 我如何构造一个查询,返回一个按其分行排序的银行列表 我有以下资料:Sql 如何让小组成员选择“最早”的结果?,sql,mysql,ruby-on-rails,Sql,Mysql,Ruby On Rails,假设我试图对银行和分行进行分类,其中一家银行通过branchs.Bank\u id有多个分行。每个分行都有一个awesomeness factor branchs.awesomeness 我如何构造一个查询,返回一个按其分行排序的银行列表 我有以下资料: SELECT * FROM `banks` INNER JOIN `branches` ON `branches`.`bank_id` = `banks`.`id` GROUP BY `banks`.`id` ORDER BY `b
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。 从查询中删除分组依据,并将排序更新为: 按分行排序。银行id,分行。卓越 如果您安装groupping,请使用最小聚合函数为每个组获得最小的awebomeness 由MinBranchs.awemomeness ASC订购 更新:如果您想要两者的混合,并且希望按最小权重对银行进行排序,并按自身权重对银行中的分行进行排序,请使用以下查询:
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;
如果您还想获取分支数据,我不理解为什么要使用GROUP BY。 从查询中删除分组依据,并将排序更新为: 按分行排序。银行id,分行。卓越 如果您安装groupping,请使用最小聚合函数为每个组获得最小的awebomeness 由MinBranchs.awemomeness ASC订购 更新:如果您想要两者的混合,并且希望按最小权重对银行进行排序,并按自身权重对银行中的分行进行排序,请使用以下查询:
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;
也许吧
也许吧
补充Scrum Meisters的回答: 联接语法将记录从父记录联接到子记录,当子记录可以有多个记录与父记录关联时,您将得到重复的记录 DISTINCT在从所有涉及的表中选择所有列时没有帮助,因为DISTINT需要复制整行才能删除它。在本例中,每行将有不同的分支信息 MySQL的GROUP BY support省略列被大多数数据库用作支柱——很少有其他数据库支持这一点,所以如果您转到SQL Server、Oracle、PostgreSQL。。。MySQL的GROUP BY支持的另一个问题是,GROUP BY中未定义且不在聚合函数中的列值是任意的——数据集越大,就越不可能保证一致的输出
补充Scrum Meisters的回答: 联接语法将记录从父记录联接到子记录,当子记录可以有多个记录与父记录关联时,您将得到重复的记录 DISTINCT在从所有涉及的表中选择所有列时没有帮助,因为DISTINT需要复制整行才能删除它。在本例中,每行将有不同的分支信息 MySQL的GROUP BY support省略列被大多数数据库用作支柱——很少有其他数据库支持这一点,所以如果您转到SQL Server、Oracle、PostgreSQL。。。MySQL的GROUP BY支持的另一个问题是,GROUP BY中未定义且不在聚合函数中的列值是任意的——数据集越大,就越不可能保证一致的输出
显示更多的模式和预期结果,我对“最早”的含义有些迷茫?时间/日期?还是什么?再多展示一些你的模式,以及预期的结果,我对“最早”的含义有些迷茫?时间/日期?还是什么?谢谢,Scrum Meister先生。聚合函数是我仍在思考的问题。不过,你的建议似乎效果不错。我也完全同意你的评估,考虑到我的问题所暗示的,分组是没有必要的。我提出这个问题的真正目的是,分组是有用的,即询问者只希望每家银行中有一家,我觉得断言我在寻找分组比解释需要分组的复杂情况更有用。@steven xu如果你使用分组,那就意味着你想对分组进行排序,但是,不需要对组中的各个分支进行排序。为此,请使用MIN函数。我想让您知道,虽然您的查询将正确排序,但由于您选择了*,对于每家银行,将返回的分行行将是随机的,因为您是按银行分组的,但选择了“分行到”。使用嵌套查询样式生成最小awesomeness与仅在选择参数中包含MINawesomeness有什么区别?@steven xu嵌套查询将让您
选择所有银行和所有分行,按银行分组将得到所有银行和1个随机分行行。谢谢,Scrum Meister先生。聚合函数是我仍在思考的问题。不过,你的建议似乎效果不错。我也完全同意你的评估,考虑到我的问题所暗示的,分组是没有必要的。我提出这个问题的真正目的是,分组是有用的,即询问者只希望每家银行中有一家,我觉得断言我在寻找分组比解释需要分组的复杂情况更有用。@steven xu如果你使用分组,那就意味着你想对分组进行排序,但是,不需要对组中的各个分支进行排序。为此,请使用MIN函数。我想让您知道,虽然您的查询将正确排序,但由于您选择了*,对于每个银行,将返回的分行行将是随机的,因为您是按银行分组的,但选择的是“分行到”。使用嵌套查询样式生成最小值与仅在选择参数中包含最小值有什么区别?@steven xu嵌套查询将允许您选择所有银行和所有银行分支机构,按银行分组将给出所有银行和1个随机分支行。我正在尝试转换到PostgreSQL,您的第三点被证明是非常正确的。我仍然无法使用psql将此功能作为作用域使用。@Steven Xu:如果PostgreSQL 8.4+,请重新编写以使用ROW_NUMBER遗憾的是,MySQL不支持分析函数。对不起;你能详细解释一下你所说的使用排号的暗示是什么意思吗?我查阅了文档,但它似乎与我当前的quandry没有任何关系。@Steven Xu:创建一个新的问题并用链接回复,我会的。我要赶超级碗,但今晚我会把它拿出来。谢谢你的帮助!我正在尝试转换到PostgreSQL,您的第三点被证明是非常正确的。我仍然无法使用psql将此功能作为作用域使用。@Steven Xu:如果PostgreSQL 8.4+,请重新编写以使用ROW_NUMBER遗憾的是,MySQL不支持分析函数。对不起;你能详细解释一下你所说的使用排号的暗示是什么意思吗?我查阅了文档,但它似乎与我当前的quandry没有任何关系。@Steven Xu:创建一个新的问题并用链接回复,我会的。我要赶超级碗,但今晚我会把它拿出来。谢谢你的帮助!