Mysql 如何使用具有最小字段值的group by选择行?
今天我发布了一个问题,得到了一个很好的答案: 我认为它帮助了我,但我发现它返回了错误的数据。因此,我将这个问题转载到这里,并附上我收到的答案,同时我将解释为什么这个问题对我不起作用 数据示例:Mysql 如何使用具有最小字段值的group by选择行?,mysql,sql,Mysql,Sql,今天我发布了一个问题,得到了一个很好的答案: 我认为它帮助了我,但我发现它返回了错误的数据。因此,我将这个问题转载到这里,并附上我收到的答案,同时我将解释为什么这个问题对我不起作用 数据示例: id | item_id | user_id | bid_price ---------------------------------- 1 | 1 | 11 | 1 2 | 1 | 12 | 2 3 | 1 | 13
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
问题是:
在子查询中,最小ID在整个group by item\u ID语句中选择,并且不根据最小投标价格反映。
换句话说,选择的最小id完全不取决于价格字段。因此,在结果中,我将获得组的最低价格和最低id,但这将不是同一行!该id可以与另一个bet_price值的行关联
如何调整此查询?提前谢谢你
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
现场演示
请给我看一下实际结果。请把你的问题标题改成有意义的。这是你今天的第三个问题。对于在搜索结果列表中看到mysql查询的未来读者来说,无论是构建mysql查询还是使用mysql查询都不会有任何用处。你的标题应该描述一个清晰的问题,而这两个标题都不能描述任何有意义的事情。谢谢你的提示!很有魅力,谢谢你。我将用项目ID添加WHERE条件-没什么大不了的。对不起,我需要选择整行。然后您可以删除distinct。它将给你所有的项目与最低出价
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);