• 1398. 购买了产品 A 和产品 B 却没有购买产品 C 的顾客


    SQL架构

     Customers 表:

    +---------------------+---------+
    | Column Name         | Type    |
    +---------------------+---------+
    | customer_id         | int     |
    | customer_name       | varchar |
    +---------------------+---------+
    customer_id 是这张表的主键。
    customer_name 是顾客的名称。

    Orders 表:

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | order_id      | int     |
    | customer_id   | int     |
    | product_name  | varchar |
    +---------------+---------+
    order_id 是这张表的主键。
    customer_id 是购买了名为 "product_name" 产品顾客的id。
    

    请你设计 SQL 查询来报告购买了产品 A 和产品 B 却没有购买产品 C 的顾客的 ID 和姓名( customer_id 和 customer_name ),我们将基于此结果为他们推荐产品 C 。
    您返回的查询结果需要按照 customer_id 排序

    查询结果如下例所示。

    Customers table:
    +-------------+---------------+
    | customer_id | customer_name |
    +-------------+---------------+
    | 1           | Daniel        |
    | 2           | Diana         |
    | 3           | Elizabeth     |
    | 4           | Jhon          |
    +-------------+---------------+
    
    Orders table:
    +------------+--------------+---------------+
    | order_id   | customer_id  | product_name  |
    +------------+--------------+---------------+
    | 10         |     1        |     A         |
    | 20         |     1        |     B         |
    | 30         |     1        |     D         |
    | 40         |     1        |     C         |
    | 50         |     2        |     A         |
    | 60         |     3        |     A         |
    | 70         |     3        |     B         |
    | 80         |     3        |     D         |
    | 90         |     4        |     C         |
    +------------+--------------+---------------+
    
    Result table:
    +-------------+---------------+
    | customer_id | customer_name |
    +-------------+---------------+
    | 3           | Elizabeth     |
    +-------------+---------------+
    只有 customer_id 为 3 的顾客购买了产品 A 和产品 B ,却没有购买产品 C 。
    1. select
    2. c.customer_id,c.customer_name
    3. from
    4. (
    5. select
    6. customer_id,sum(if(product_name = 'A',1,0)) sumA,sum(if(product_name = 'B',1,0)) sumB,sum(if(product_name = 'C',1,0)) sumC
    7. from
    8. Orders
    9. group by
    10. customer_id
    11. having
    12. sumA >=1 and sumB >=1 and sumC =0
    13. ) s1 left join Customers c
    14. on s1.customer_id = c.customer_id
    15. order by
    16. customer_id

    sum(直接写判断语句):

    1. select
    2. c.customer_id,c.customer_name
    3. from
    4. (
    5. select
    6. customer_id,sum(product_name = 'A') sumA,sum(product_name = 'B') sumB,sum(product_name = 'C') sumC
    7. from
    8. Orders
    9. group by
    10. customer_id
    11. having
    12. sumA >=1 and sumB >=1 and sumC =0
    13. ) s1 left join Customers c
    14. on s1.customer_id = c.customer_id
    15. order by
    16. customer_id

  • 相关阅读:
    【无标题】
    30 - 时间模块与随机模块(含一阶段测试编程题)
    数据结构02附录01:顺序表考研习题[C++]
    Python3数据科学包系列(二):数据分析实战
    Java循环结构—多重循环及continue break(基础)
    雪花算法(id生成算法)
    了解mybatis
    【打卡】21天学习挑战赛—RK3399平台开发入门到精通-day8
    【系统设计】设计一个短链接系统
    消息中间件篇之Kafka-消费顺序性
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125478182