免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1844 | 回复: 2

07年以来每个客户最贵的订单信息--group by 与 not exists [复制链接]

论坛徽章:
0
发表于 2009-10-29 11:13 |显示全部楼层
四列acc_no, total_price, order_id, order_date,一个表, order_main
数据类似于:

acc_no    total_price      order_id    order_date
1               300                 20         2009-01-09
2               3245               22         2007-01-09
3               98                   63         2008-11-09
2               44442             53         2009-09-09
1               234                 34         2009-12-09
....
....

如果只要acc_no与total_price也就简单了,直接
SELECT acc_no, max( total_price )

FROM po.order_main WHERE order_id >0
AND acc_no IS  NOT  NULL AND order_date >  "2007-01-01" GROUP  BY acc_no ORDER  BY acc_no
也就够了。

不过现在还想要另外两列
order_id,
order_date的信息。
直接把这两列附在上面的sql后面是不行的。

所以只有用另外的办法,not exists 如:
SELECT a.acc_no, a.total_price, a.order_id, a.order_date
FROM po.order_main AS a
WHERE  NOT
EXISTS (SELECT  *
FROM po.order_main
WHERE total_price > a.total_price
AND acc_no = a.acc_no
)
AND a.order_date >  "2007-01-01" AND a.order_id >0 AND a.acc_no IS  NOT  NULL  ORDER  BY a.acc_no

这样据说是理想的结果。

不过有些客户订单的总价一直是10,就没有出现这个sql的结果中(在第一个sql的结果中出现了)
所以这个sql的结果不全

怎么改才能把那些订单总价都相同的客户也包括进来呢?
牛人也顺便解决下not exists的用法吧。
谢谢

论坛徽章:
0
发表于 2009-10-29 16:07 |显示全部楼层
总价最大值相同的应该都会显示出来

只是第一条语句显示一行,第二条语句(采用not exitst)的显示多行。

论坛徽章:
0
发表于 2009-10-29 17:05 |显示全部楼层
现在才发现这两个sql返回的结果有很大的不同

不知道是什么原因,因为我对第二个sql不太懂

不仅仅是第二个结果里少了所有总价都相同的客户的结果,也少了有一次订购,多次订购的客户

唉,第一个sql返回结果 17792条, 第二个返回 16922 条

高手解释下第二条sql吧

第二条的结果

第二条的结果

第一条的结果

第一条的结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP