有关group by 排序的问题,请进

oktianh 2007-01-19 05:33:15
有这样一个表:tab1
+----+-------+--------+-------+
| id | aa | bb | cc |
+----+-------+--------+-------+
| 1 | 0001 | 1 | 10 |
| 2 | 0001 | 2 | 10 |
| 3 | 0002 | 6 | 10 |
| 4 | 0003 | 5 | 10 |
| 5 | 0003 | 7 | 10 |
| 6 | 0003 | 4 | 10 |
| 7 | 0004 | 3 | 10 |
+----+-------+--------+-------+

用了下列语句:
select aa,bb,sum(cc) as cc from tab1 group by aa order by cc desc,bb desc
输出结果如下:
aa bb cc
======================
0001 1 20
0002 6 10
0003 5 30
0004 3 10
我想要的结果是:
aa bb cc
======================
0001 1 20
0002 6 10
0003 4 30
0004 3 10
也就是说字段bb对应的数据库中最新一条数据的值,这个如何实现???
...全文
547 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
oktianh 2007-01-24
  • 打赏
  • 举报
回复
yh801216(艾奥利斯): 我后来也想了下,确实用简单的SQL没法来实现,感谢以上几位。结贴了
「已注销」 2007-01-21
  • 打赏
  • 举报
回复
楼上的应该是可以出来正确结果。(我没测试,但应该可以)

关于楼主的问题,给你回答下,mysql中group by的时候显示的记录是同group 中最先插入的,也就是最旧的:P呵呵,因此楼主的想法用简单的sql是没办法实现的。
KevC 2007-01-21
  • 打赏
  • 举报
回复
试一下
select tab1.aa,tab1.bb,ntab.cc from tab1,(select max(id) as id,sum(cc) as cc from tab1 group by aa) as ntab where tab1.id=ntab.id order by ntab.cc
KevC 2007-01-21
  • 打赏
  • 举报
回复
select aa,bb,sum(cc) as cc from tab1 group by aa order by cc desc,bb desc
有GROUP BY的时候,SELECT后不应该有与AA不相关的字段,你这条查询语句根本没告诉数据库你要是BB是哪一个,BB DESC也只是数据库自己在相同的AA记录里拿到了BB以后再进行排序的
qngzh 2007-01-21
  • 打赏
  • 举报
回复
提示一下嵌套查询
先select aa, sum(cc) as cc from tab1 group by aa order by cc desc
然后...
BoyHaXin 2007-01-20
  • 打赏
  • 举报
回复
最新一条,不就是最后添加的一条么,LZ
oktianh 2007-01-20
  • 打赏
  • 举报
回复
有人来帮帮忙吗?
oktianh 2007-01-20
  • 打赏
  • 举报
回复
是啊,但显示的时候bb的值总是最早录入的那一条记录的值,有什么办法可让显示最加添加的记录的值?
oktianh 2007-01-19
  • 打赏
  • 举报
回复
因为cc 是进行累加的,数据是按cc进行的排序,当然是按cc为主,上面的显示结果有误,应该是:
aa bb cc
======================
0003 5 30
0001 1 20
0002 6 10
0004 3 10
我是希望bb 的值是数据库中最新一条数据的值,而不是最后一条的,无论我在后面是否加上id desc ,结果都是一样的
itian 2007-01-19
  • 打赏
  • 举报
回复
看你的order by是以bb还是以cc为主了。谁为主为放前边

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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