mysql - 多级查询从第二个子查询获取值来驱动父元素

标签 mysql sql

我正在尝试进行多级查询,以给出在我看来简单的答案。我有 2500 行针对邮政编码的数据。每行包含一个邮政编码、个人姓名首字母缩写、主要成本和次要成本。我想根据主要成本获得邮政编码的最低成本 - 这很容易 - 但如果有多个人对于相同的邮政编码具有相同的主要成本,我需要返回次要成本最低的人。 示例:

postcode, initials, p_cost, s_cost
AB12    , DS      , 100   , 0
AB12    , JH      , 100   , 40
AB12    , SS      , 120   , 0

因此,我想退出 DS,因为它们与 JH 的主要成本最低,但它们的次要成本也是两者中最低的。 这是我到目前为止的 SQL:

SELECT initials, min(s_cost) FROM
    (SELECT * FROM MyTable
     WHERE postcode = 'AB12'
     and p_cost = 
        (select min(p_cost) from MyTable 
         WHERE postcode = 'AB12'));

我也尝试过:

SELECT * FROM MyTable
WHERE postcode = 'AB12' 
and p_cost = (select min(p_cost) 
               from MyTable 
               WHERE postcode = 'AB12'
               and s_cost = (select min(s_cost) 
                                     from MyTable 
                                     WHERE postcode = 'AB12'));

有人可以帮我摆脱这里的痛苦吗,这应该很简单,但距离我上次愤怒地写 SQL 已经有 15 年了,这真的让我很烦恼。

感谢大家的帮助:-)

最佳答案

您是否尝试过使用连接条件作为过滤器将表自身连接起来?

select mt1.* 
from mytable mt1
left join mytable mt2 
    on mt1.postcode = mt2.postcode 
        and ( mt1.p_cost < mt2.p_cost 
         or (mt1.p_cost = mt2.p_cost and mt1.s_cost < mt2.s_cost)
        )
where mt1.postcode = 'AB12'

顺便说一句,此代码未经测试。

关于mysql - 多级查询从第二个子查询获取值来驱动父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46854318/

相关文章:

sql - && 运算符改变结果的顺序

sql - PostGis 插入矩形

sql - 如何在sqlite中计算平方根

sql - PostgreSQL:有效地将 JSON 数组拆分为行

php - MySQL order by 哪里大于按字母顺序排列的短语?

php - 密码验证

MySQL:从给定的开始日期和当前日期确定财政季度

php - 如何以及在何处设置和检查 group_concat_max_len

mysql - 用连接语句更新mysql?

php - 为什么在以下场景中无法访问资源 ID?