最好选择WHERE MAX

时间:2016-10-12 08:56:31

标签: mysql sql select max

是否有任何更好的解决方案来获取这些多重(有时只有一行,有时是多个)行,其中amount值最小而没有子查询?如果没有更好的解决方案,那很好,只是有点悲伤。 :)

My Table

我的第一个解决方案是这样的(我不喜欢子查询)

SELECT * FROM transactions
WHERE wallet_id = 148
  AND amount = (SELECT MIN(amount) FROM transactions WHERE wallet_id = 148)

Result

2 个答案:

答案 0 :(得分:2)

查找每个钱包最低金额的一般查询:

SELECT t1.*
FROM transactions t1
JOIN (SELECT wallet_id, MIN(amount) minamount
      FROM transactions GROUP BY wallet_id) t2
    on t1.wallet_id = t2.wallet_id and t1.amount = t2.minamount

WHERE t1.wallet_id = 148  -- keep or remove this line

答案 1 :(得分:0)

有时被称为“LEFT Excluding JOIN”(这里它也是一个“自联接”,因为我们使用表来加入自身)。连接的条件要求t1.amount大于t2.amount,然后通过where子句我们找到没有匹配的行,因此我们有最低的t1.amount值。

SELECT
      t1.*
FROM transactions t1
LEFT JOIN transactions t2 ON t1.wallet_id = t2.wallet_id AND t1.amount > t2.amount
WHERE t1.wallet_id = 148 AND t2.wallet_id IS NULL

请参阅:http://data.stackexchange.com/stackoverflow/query/556758/left-excluding-self-join

另见Left excluding JOIN

nb:我并不认为这更好或“更正”;只是它是另一种选择