• 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

  • 相关阅读:
    css3文字环绕旋转
    navicat设置mysql自动根据插入时间更新时间
    1-丁基-3-甲基咪唑锚氢氧化物[bmim]OH;新型氢氧型N-十二烷基双核吗啉离子液体[Nbmd]OH离子液体
    Android查看签名信息系列 · 使用Android Studio获取签名
    perfma:JVM工具
    Renesas:如何指定段(地址)存放数据
    vue2的vue.config文件
    Spark Streaming状态管理函数
    初识c++
    轻松学会汉诺塔
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125478182