MYSQL中可以按照两项或者多项的和降序select吗

xiyuchenbing 2011-02-20 09:12:00
详细描述是这样的:

数据库中有两个表,分别为A、B,A表中有a、b两个数据单元需要用,B中有c、d两个数据单元要用,将两个表连接(全连接),我想访问的结果是需要按照a,b,c,d四项的和来排序的,需要怎么实现呢?

ps:abcd是需要select的数据,select之后需要加起来才是最终要的结果,两个表有相同的主键作为连接。


周末还得写代码,好悲剧,好人们来帮帮忙吧
...全文
107 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
herengao 2011-02-20
  • 打赏
  • 举报
回复
select a,b,c,d,a+b+c+d as sum from A,B order by sum
这个应该可以
feixianxxx 2011-02-20
  • 打赏
  • 举报
回复
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));
ACMAIN_CHM 2011-02-20
  • 打赏
  • 举报
回复

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

ACMAIN_CHM 2011-02-20
  • 打赏
  • 举报
回复
[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]
feixianxxx 2011-02-20
  • 打赏
  • 举报
回复
[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]
xiyuchenbing 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 iihero 的回复:]

哦, 忘了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;
[/Quote]

好的,谢谢,我试用一下
rucypli 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xiyuchenbing 的回复:]
引用 3 楼 iihero 的回复:

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


你意思是说在sum里直接对这几项用加号求和吗?可以这样用啊。。。。
[/Quote]
可以的多了
iihero_ 2011-02-20
  • 打赏
  • 举报
回复
哦, 忘了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;
绿野仙踪 2011-02-20
  • 打赏
  • 举报
回复
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

瞧瞧这个行么
xiyuchenbing 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iihero 的回复:]

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

你意思是说在sum里直接对这几项用加号求和吗?可以这样用啊。。。。
xiyuchenbing 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iihero 的回复:]

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


SUM 不是求一列数据的和的吗,可以求行的和吗?
xiyuchenbing 2011-02-20
  • 打赏
  • 举报
回复
select * from A LEFT JOIN B on(A.id=B.id) order by SUM_ALL(A.a+A.b+B.c+B.d) DESC
iihero_ 2011-02-20
  • 打赏
  • 举报
回复
order by sum(a+b+c+d) desc
前边的select, 你自己去组织。
xiyuchenbing 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 htl258 的回复:]

建议列举一些数据更容易看懂。
[/Quote]

假设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就是现在需要的一个东东,大牛们帮我想个策略实现这个功能吧
htl258_Tony 2011-02-20
  • 打赏
  • 举报
回复
建议列举一些数据更容易看懂。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧