gpt4 book ai didi

mysql - 如何从值为最小值或最大值的一对多关系中仅加入一行?

转载 作者:行者123 更新时间:2023-11-29 06:15:39 27 4
gpt4 key购买 nike

我有 2 个表:

产品:

id|name
1|first
2|second

product_unit:

id|product_id|price
1|1|10
2|1|20
3|2|40
4|2|30

我想选择最小值大于 15 且小于 35 的产品。第一个产品的最小值是 10,第二个产品的最小值是 30。

现在我有这个查询:

select products.*, min(product_unit.price) as min_price
from `products`
left join `product_unit`
on `product_unit`.`product_id` = `products`.`id`
and (`product_unit`.`value` > '15' and `product_unit`.`value` < '35')
group by `products`.`id`

此查询返回:

id|name|price
1|first|20
2|second|30

但应该:

id|name|price
2|second|30

因为 id=1 的产品的最低价格为 10,低于 15。

对此的正确查询是什么?(如果可能的话,我宁愿没有派生表)

最佳答案

使用派生表的一种方法。

select p.id, p.name, t.minprice as price 
from products p
join (select product_id,min(price) as minprice
from product_unit
group by product_id) t
on t.product_id = p.id
where t.minprice > 15 and t.minprice < 35

select p.id, p.name, t.minprice as price 
from products p
join (select product_id,min(price) as minprice
from product_unit
group by product_id
having min(price) between 16 and 34) t
on t.product_id = p.id

或者没有派生表

select pu.product_id,p.name,min(pu.price) as minprice 
from product_unit pu
join products p on pu.product_id = p.id
group by pu.product_id,p.name
having min(pu.price) between 16 and 34

关于mysql - 如何从值为最小值或最大值的一对多关系中仅加入一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36061689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com