Mysql 如何获取包含特定最小值的行?
我有一个3行3列的表。对于所有具有相同名称的行,我希望检索位置列中具有最小值的行。在这个例子中。结果应该是(苹果,红色,3)和(甜瓜,大,空) “位置”列中的null值表示水果不在列表中Mysql 如何获取包含特定最小值的行?,mysql,sql,Mysql,Sql,我有一个3行3列的表。对于所有具有相同名称的行,我希望检索位置列中具有最小值的行。在这个例子中。结果应该是(苹果,红色,3)和(甜瓜,大,空) “位置”列中的null值表示水果不在列表中 name category position apple fruit 5 apple red 3 melon big null null使这个问题变得棘手。我不确定它应该被认为是“高”还是“低”。让我假设“低”: null位置
name category position
apple fruit 5
apple red 3
melon big null
null
使这个问题变得棘手。我不确定它应该被认为是“高”还是“低”。让我假设“低”:
null
位置是什么意思?它意味着名称在类别中没有位置。多行具有相同位置如何?@UsagiMiyamoto。这是一个适合OP的问题。问题的措辞表明“min”位置是唯一的。您尝试过这个查询吗?因为结果是错误的。@Crazysabpath这是一个打字错误,他已经更新了他的答案。这个查询工作正常+1从我这边。@Jibin Balachandran你是对的,现在它给出了正确的结果。
select t.*
from t
where coalesce(t.position, -1) = (select min(coalesce(t2.position, -1))
from t t2
where t2.name = t.name
);
SELECT
f.*
FROM
(
SELECT
name,
MIN(IFNULL(position,0)) as min_position
FROM
fruits
GROUP BY
name
) tmp
LEFT JOIN
fruits f ON
f.name = tmp.name AND
IFNULL(f.position,0) = min_position
-- GROUP BY name
-- optional if multiple (name, position) are possible for example
-- [apple,fruit,5], [apple,red,5]