是否有任何更好的解决方案来获取这些多重(有时只有一行,有时是多个)行,其中amount
值最小而没有子查询?如果没有更好的解决方案,那很好,只是有点悲伤。 :)
我的第一个解决方案是这样的(我不喜欢子查询)
SELECT * FROM transactions
WHERE wallet_id = 148
AND amount = (SELECT MIN(amount) FROM transactions WHERE wallet_id = 148)
答案 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
图nb:我并不认为这更好或“更正”;只是它是另一种选择