【问题标题】:MYSQL Query users orders if they used a certain coupon codeMYSQL 查询用户订单是否使用了某个优惠券代码
【发布时间】:2015-10-19 20:38:18
【问题描述】:

我正在尝试了解使用折扣代码的用户是否在初始订单后下单。

三个表分别是:orderusercoupon_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


【解决方案1】:

试试这个:

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)

这假设用户只能使用一次优惠券。

【讨论】:

  • 谢谢先生。这正是我所需要的。读到这里,似乎很简陋,但我头撞墙了一个小时。
猜你喜欢
  • 2021-04-09
  • 2016-05-12
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多