繁体   English   中英

MYSQL选择唯一的id,其中一个或多个记录中的列值不为null

[英]MYSQL select unique id's where column value is not null in one or more records

背景

我有一个包含客户购买记录的表,该表有一个名为coupon_id的列,如果客户在购买期间没有使用优惠券,则该列为空,如果他们这样做,则包含优惠券ID。 该表可以包含针对单个客户的多个购买,客户可能在一次购买期间而不是在另一次购买期间使用优惠券。

+-------+-------------+-----------+-------------+
| ID    | customer_id | coupon_id | other_data  | 
+-------+-------------+-----------+-------------+
| 0     |  1          | 32        | ...         |
| 1     |  1          | null      | ...         |
| 2     |  1          | null      | ...         |
| 3     |  1          | null      | ...         |
| 4     |  2          | null      | ...         |
| 5     |  3          | 11        | ...         |
| 6     |  4          | null      | ...         |
| 7     |  4          | null      | ...         |
+-------+-------------+-----------+-------------+ 

问题

我想为所有从未使用优惠券购买的客户获取customer_id。 我正在使用的当前查询仍然是返回使用优惠券购买的客户。

SELECT customer_id from checkouts c 
WHERE code_id IS NULL
GROUP BY customer_id 
ORDER BY customer_id asc

如何为从未使用优惠券购买的客户选择唯一身份识别列表?

使用WHERE NOT EXISTS和子查询。 就像是:

    SELECT DISTINCT
        customer_id
    FROM checkouts c
    WHERE NOT EXISTS (
        SELECT *
        FROM checkouts
        WHERE
            checkouts.customer_id = c.customer_id
            AND coupon_id IS NOT NULL
    ) cc;

不完全确定这是否是正确的MySQL语法,但这是它的要点。

如何为从未使用优惠券购买的客户选择唯一身份识别列表?

您可以使用以下查询,

SELECT customer_id from checkouts c 
    GROUP BY customer_id 
    HAVING count(coupon_id) = 0
    ORDER BY customer_id;

它将返回没有优惠券ID的所有客户ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM