今天我发布了一个问题并得到了一个很好的答案:Stuck in building mysql query。
我虽然帮助了我,但我发现它返回了错误的数据。所以我在这里回答这个问题,我收到了一个答案,我也会解释为什么它不适合我的问题。
数据示例:
id | item_id | user_id | bid_price
----------------------------------
1 | 1 | 11 | 1
2 | 1 | 12 | 2
3 | 1 | 13 | 3
4 | 1 | 14 | 1
5 | 1 | 15 | 4
6 | 2 | 16 | 2
7 | 2 | 17 | 1
8 | 3 | 18 | 2
9 | 3 | 19 | 3
10 | 3 | 18 | 2
预期结果:
id | item_id | user_id | bid_price
----------------------------------
1 | 1 | 11 | 1
7 | 2 | 17 | 1
8 | 3 | 18 | 2
提供解决方案:
select m.id, m.item_id, m.user_id, m.bid_price
from my_table m
inner join (
select item_id, min(id) min_id, min(bid_price) min_price
from my_table
where item_id IN (1,2,3)
group by item_id
) t on t.item_id = m.item_id
and t.min_price= m.bid_price
and t.min_id = m.id
问题: 在子查询中,整个组按(item_id)语句选择最小ID,并且不根据最小bid_price反映。 换句话说,根据价格字段选择最小id。所以,在结果中我将获得该组的最低价格和最低ID,但这不会是同一行! id可以与具有另一个bet_price值的行相关。
如何调整此查询?提前谢谢!
答案 0 :(得分:1)
SELECT min(m.id) AS id, m.item_id, m.user_id, m.bid_price
FROM my_table m
INNER JOIN (
SELECT item_id, min(bid_price) AS min_price
FROM my_table
GROUP BY item_id
) t ON t.item_id = m.item_id
AND t.min_price= m.bid_price
GROUP BY item_id
输出
id item_id user_id bid_price
1 1 11 1
7 2 17 1
8 3 18 2
现场演示
答案 1 :(得分:0)
SELECT DISTINCT
t1.item_id,
t1.bid_price
FROM tab1 t1
WHERE NOT exists(SELECT 1
FROM tab1 t2
WHERE t2.item_id = t1.item_id
AND t2.bid_price < t1.bid_price)
AND t1.item_id IN (1, 2, 3);