Mysql MIN()Max()函数,带JOIN和GROUP BY

时间:2017-07-04 06:31:25

标签: mysql join group-by

我有一个问题,我需要找到MIN()和MAX()与JOIN和GROUP BY与Mysql。

我有3张桌子:

  • 父(parent_id)
  • 儿童(child_id,parent_id)
  • 价格(price_id,child_id,价格)

一方父母可以有很多孩子,一个孩子只有一个孩子。

以下是获取父母所有价格的查询:

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

谢谢!

1 个答案:

答案 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