想写一句sql,将某段时间内支付金额满XX元并且没有送赠品的用户列出来

bingy108 2011-05-27 10:31:22
最近在公司在搞活动,boss说要回馈客户,对某段时间内支付金额满XX元的用户赠送礼物。

MySQL数据库


【订单表 order_info】
order_sn(订单号) money_paid(已支付金额) user_id(用户ID) pay_time(支付时间) .....

【订单商品表 order_goods】
rec_id(自增id) goods_name(商品名称) goods_price(商品价格) goods_num(商品数量) ...


-----------------------------
我尝试用下面的sql将某段时间内支付金额满80元并且没有送赠品(商品价格为0)的用户列出来


SELECT oi.user_id,SUM(oi.money_paid) as all_money_paid, GROUP_CONCAT(oi.order_sn) as order_sns,
(SELECT COUNT(goods_name) FROM order_goods
WHERE order_sn IN(GROUP_CONCAT(oi.order_sn)) AND goods_price=0) AS gift_num
FROM order_info as oi
WHERE oi.pay_time>='2011-05-11' AND oi.pay_time <'2011-05-20'
GROUP BY oi.user_id HAVING SUM(oi.money_paid)>=80


结果(一个用户可能会下几个订单)
-----------------------------------------------------------------------------------------------------------
【user_id】 【all_money_paid】 【order_sns】 【gift_num】
125 110.00 2011040969488,2011040917914,2011040941384 0
215 110.00 2011040969458 1
378 110.00 2011040960188,2011040900784 0
-----------------------------------------------------------------------------------------------------------


实际上


用户ID 125有一个赠品存在于订单2011040941384中,
用户ID 215有一个赠品存在于订单2011040969458中,
用户ID 378没有一个赠品


也就是order_sns只有一个订单的时候统计结果是正确的,要是2个或两个以上就不行了。

结果一番努力还是不知道怎么写比较好,请各位大大帮帮忙,等着用,比较急!!

...全文
49 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingy108 2011-05-28
  • 打赏
  • 举报
回复
万分谢谢!!!确实是in的问题,事情解决了!又学到东西了,哈
yyoinge 2011-05-27
  • 打赏
  • 举报
回复
WHERE order_sn IN(GROUP_CONCAT(oi.order_sn))
改成
WHERE LOCATE(order_sn, GROUP_CONCAT(oi.order_sn)) > 0
yyoinge 2011-05-27
  • 打赏
  • 举报
回复
应该是in的问题
只有一个订单时,in语句解析为 :'2011040969458' in ('2011040969458'),这是可以查询到数据的
而有两个或两个以上的订单时,in语句解析为:'2011040969488' in('2011040969488,2011040917914,2011040941384'),这样就不符合了,所以无法统计到赠品数量

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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