【发布时间】:2015-10-19 20:38:18
【问题描述】:
我正在尝试了解使用折扣代码的用户是否在初始订单后下单。
三个表分别是: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
但我收到的子查询返回超过 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
谢谢。
【问题讨论】:
-
请提供示例数据和所需的输出。
-
“被退回”是什么意思?您需要提供有关您要完成的工作的更多信息。
-
你不认为 INNER JOIN 应该跟 ON table1.match_colum = table2.match_column。您能在上面的查询中告诉您要等同于哪一列吗?另外您能否填写您打算放置的{}或更多列的详细信息。
-
更新了示例代码、我尝试过的代码以及所需的输出等。
标签: mysql