有产品表 goods 字段有
id name
1  g1
2  g2
3  g3
有个订单表 order 字段有
goods_id  cash
1          20
1          30
3          40现在要显示所有产品和产品总的订单金额并按订单总金额排序。怎么用一条sql查询出来。 

解决方案 »

  1.   

    select g.id,g.name,sum(o.cash) sum_cash
    from goods g
    left join order o on o.goods_id=g.id
    group by g.id
    order by sum(o.cash)
      

  2.   

    select a.id,a.name,b.ma
    from goods a
    left join ( select goods_id,sum(cash) as ma from order group by goods_id) b 
    on a.id=b.goods_id
    order by 3
      

  3.   

    or
    select a.id,a.name,sum(cash) as ma
    from goods a
    left join order b 
    on a.id=b.goods_id
    group by a.id
    order by 3 
      

  4.   

    select a.id,a.name,sum(ifnull(b.cash,0)) as order_num
     from goods a
      left join order b 
        on a.goods_id=b.id
          group by a.id
            order by order_num
      

  5.   

    特别注意一下:若产品没有定单的话,左联接会产生NULL的记录,进行汇总时,要对这些记录作转换处理,否则,结果有误。
      

  6.   

    谢谢大家 如果 order字段里在添加一个 uid的字段 如下
    goods_id  cash  uid
    1          20    1
    1          30    2
    3          40    2
    1          10    1  我现在要查询的是产品金额是uid=1的订单的金额,如果即在下面
    select g.id,g.name,sum(o.cash) sum_cash
    from goods g
    left join order o on o.goods_id=g.id
    group by g.id
    order by sum(o.cash)
    中加上条件
    where o.uid=1这样查询出来的结果订单金额为空的产品就不会在结果中了。
      

  7.   

    select g.id,g.name,sum_cash
    from goods g left join (
    select goods_id,sum(cash) as sum_cash 
    from order 
    where uid=1) o  on g.id=o.goods_id