我有一个问题,我需要找到MIN()和MAX()与JOIN和GROUP BY与Mysql。
我有3张桌子:
一方父母可以有很多孩子,一个孩子只有一个孩子。
以下是获取父母所有价格的查询:
select child.parent_id , price.child_id , price.price
from parent
inner join child on child.parent_id = parent.id
inner join price on price.child_id = child.id
我想找到父母的最低价格。但我不想只是价格,我想要price_id!
您能否帮助我查询以查找每位父母的min()价格的price_id?
以下是数据样本:
parent1 : parent_id=1
parent2 : parent_id=2
child1 : child_id=1 , parent_id=1
child2 : child_id=2 , parent_id=1
child3 : child_id=3 , parent_id=1
child4 : child_id=4 , parent_id=2
child5 : child_id=5 , parent_id=2
child6 : child_id=6 , parent_id=2
price1 : price_id=1 , child_id=1, price=15
price2 : price_id=2 , child_id=2, price=5
price3 : price_id=3 , child_id=3, price=10
price4 : price_id=4 , child_id=4, price=10
price5 : price_id=5 , child_id=5, price=20
price6 : price_id=6 , child_id=6, price=30
我想为parent1找到他孩子的最低价格的id,结果是:price_id = 2
我想为parent2找到他孩子的最低价格的id,结果是:price_id = 4
我想为parent1找到他孩子的MAX价格的id,结果是:price_id = 1
我想为parent2找到他孩子的MAX价格的id,结果是:price_id = 6
谢谢!
答案 0 :(得分:0)
您需要在选定的表
上加入一些cinner select distinct t.parent_id, price.price_id
from price
inner join child on price.child_id = child.child_id
inner join (
select
parent.parent_id
min(price) min_price
from parent
inner join child on parent.parent_id = child.parent_id
inner join price on price.child_id = child.child_id
group by parent.parent_id ) t on t.min_price = price.price
and t.parent_id = child.parent_id
并查看结果
然后按结果分组
select parent_id, min(price_id), price from (
select distinct t.parent_id, price.price_id, price.price
from price
inner join child on price.child_id = child.child_id
inner join (
select
parent.parent_id
min(price) min_price
from parent
inner join child on parent.parent_id = child.parent_id
inner join price on price.child_id = child.child_id
group by parent.parent_id ) t on t.min_price = price.price
and t.parent_id = child.parent_id
) t
group by arent_id, price