我正在尝试进行多级查询,以给出在我看来简单的答案。我有 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/