• 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

  • 相关阅读:
    【Java集合框架】15——TreeSet 类
    17 | DataSource 为何物?加载过程是怎样的
    小学生护眼灯怎么选?护眼学生用台灯品牌排行
    将项目部署到Windows操作系统中,并且访问该项目
    iOS 关于 UICollectionView常见使用方法
    HRD特征及其检测方法简介
    React从脚手架开始搭建项目
    Vue 关键概念介绍
    servlet实现登录功能【当用户当前未登陆,跳转登录页面才能访问,若已经登录了,才可以直接访问】
    linux-sed命令使用方法记录
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125478182