详细描述是这样的: 数据库中有两个表,分别为A、B,A表中有a、b两个数据单元需要用,B中有c、d两个数据单元要用,将两个表连接(全连接),我想访问的结果是需要按照a,b,c,d四项的和来排序的,需要怎么实现呢?ps:abcd是需要select的数据,select之后需要加起来才是最终要的结果,两个表有相同的主键作为连接。
周末还得写代码,好悲剧,好人们来帮帮忙吧

解决方案 »

  1.   


    假设A: 
    id a b
    1 10 10
    2 20 20
    3 30 30
    4 40 40
    B:
    id c d
    1 100 100
    2 200 200
    4 400 400
    将A和B左连接(A.id=B.id
    id a b c d
    1 10 10 100 100
    2 20 20 200 200
    3 30 30 0 0
    4 40 40 400 400需要类似这样的功能:
    select * from A LEFT JOIN B on(A.id=B.id) order by SUM_ALL(A.a+A.b+B.c+B.d)SUM_ALL就是现在需要的一个东东,大牛们帮我想个策略实现这个功能吧
      

  2.   

    order by sum(a+b+c+d) desc
    前边的select, 你自己去组织。
      

  3.   

    select * from A LEFT JOIN B on(A.id=B.id) order by SUM_ALL(A.a+A.b+B.c+B.d) DESC
      

  4.   

    SUM 不是求一列数据的和的吗,可以求行的和吗?
      

  5.   


    你意思是说在sum里直接对这几项用加号求和吗?可以这样用啊。
      

  6.   

    select * from (select *,(A.a+A.b+B.c+B.d) sum from A LEFT JOIN B on(A.id=B.id)) order by sum瞧瞧这个行么
      

  7.   

    哦, 忘了group by , 用这个:mysql> select * from a left join b on (a.id=b.id) group by a.id order by sum(a.a + a.b + b.c + b.d)
    desc;
      

  8.   

    [code=SQ]select *
    from a left join b using(id)
    order by (ifnull(a,0)+ifnull(b,0)+ifnull(c,0)+ifnull(d,0))[/code]
      

  9.   


       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  10.   

    select a,b,c,d,a+b+c+d as sum from A,B order by sum
    这个应该可以
      

  11.   

    [code=SQ]select IFNULL(A.id,B.id) as id,
    a,b,c,d 
    from A FULL JOIN B on(A.id=B.id) 
    order by (IFNULL(a,0)+IFNULL(b,0)+IFNULL(c,0)+IFNULL(d,0));[/code]
      

  12.   

    select IFNULL(A.id,B.id) as id, 
    a,b,c,d 
    from A FULL JOIN B on(A.id=B.id) 
    order by (IFNULL(a,0)+IFNULL(b,0)+IFNULL(c,0)+IFNULL(d,0));