我试图找出使用折扣代码的用户是否在初始订单后订购了。
这三个表是:order
,user
,coupon_uses
从coupon_uses
开始,我检索的唯一数据是通过以下代码使用代码的用户:
SELECT *
FROM coupon_uses
WHERE coupon_id = 21921
我会收到一张表,其中包含用户ID,订单ID和他们使用的优惠券。
ID Coupon_ID User_ID Order_ID
11 21921 148871 1448181
21 21921 888381 1448191
31 21921 888411 1448201
41 21921 354311 1448211
51 21921 452671 1448221
61 21921 684791 1448231
现在,我需要检查在第一个查询中返回的用户(使用代码的人)与整个order
表中的用户:
我试过这样的事情:
SELECT order.user_id,
COUNT(*) AS Total_Orders
FROM `order`
WHERE `order`.user_id = (
SELECT user_id
FROM coupon_uses
WHERE coupon_id = 21921)
AND order.order_status != "Cancelled"
GROUP BY order.user_id ASC
ORDER BY `order`.orderplaced_ts
但我收到的Subquery返回的行数超过1行。
所需的结果将是返回用户ID列表,包括订单总数和订单日期。
User_ID Total_Orders Last_Order
148871 17 2015_01_01
888381 19 2015_01_01
888411 3 2015_01_14
354311 5 2015_05_01
452671 99 2015_02_01
684791 213 2015_01_05
感谢。
答案 0 :(得分:0)
试试这个:
SELECT o.user_id, COUNT(*) AS total_orders
FROM order AS o
INNER JOIN coupon_uses AS c ON o.user_id = c.user_id
WHERE c.coupon_id = 21921
GROUP BY o.user_id
ORDER BY MIN(o.orderplaced_ts)
这假设用户只能使用优惠券一次。