• 2084. 为订单类型为 0 的客户删除类型为 1 的订单


    SQL架构

    活动表: Orders

    +-------------+------+
    | Column Name | Type |
    +-------------+------+
    | order_id    | int  | 
    | customer_id | int  |
    | order_type  | int  | 
    +-------------+------+
    order_id是此表的主键列。
    此表的每一行都表示订单的ID、订购该订单的客户的ID以及订单类型。
    订单可以是类型0或类型1。
    

    编写SQL查询以根据以下条件报告所有订单:

    • 如果客户至少有一个类型为0的订单,则不要报告该客户的任何类型为1的订单。
    • 否则,报告客户的所有订单。

    按任意顺序返回结果表。

    查询结果格式如下例所示。

    示例 1:

    输入: 
    Orders table:
    +----------+-------------+------------+
    | order_id | customer_id | order_type |
    +----------+-------------+------------+
    | 1        | 1           | 0          |
    | 2        | 1           | 0          |
    | 11       | 2           | 0          |
    | 12       | 2           | 1          |
    | 21       | 3           | 1          |
    | 22       | 3           | 0          |
    | 31       | 4           | 1          |
    | 32       | 4           | 1          |
    +----------+-------------+------------+
    输出: 
    +----------+-------------+------------+
    | order_id | customer_id | order_type |
    +----------+-------------+------------+
    | 31       | 4           | 1          |
    | 32       | 4           | 1          |
    | 1        | 1           | 0          |
    | 2        | 1           | 0          |
    | 11       | 2           | 0          |
    | 22       | 3           | 0          |
    +----------+-------------+------------+
    解释: 
    客户1有两个类型为0的订单。我们两个都返回。
    客户2的订单类型为0,订单类型为1。我们只返回类型为0的订单。
    客户3的订单类型为0,订单类型为1。我们只返回类型为0的订单。
    客户4有两个类型1的订单。我们两个都返回。
    1. # Write your MySQL query statement below
    2. with t1 as (select
    3. customer_id #至少有一个类型为0的订单的客户
    4. from
    5. Orders
    6. group by
    7. customer_id
    8. having
    9. sum(if(order_type=0,1,0)) > 0
    10. ),
    11. t2 as (
    12. select
    13. o.order_id,o.customer_id,o.order_type,t1.customer_id customer_id2
    14. from
    15. Orders o left join t1
    16. using(customer_id)
    17. )
    18. select
    19. order_id,customer_id,order_type
    20. from
    21. t2
    22. where customer_id2 is null
    23. union all
    24. select
    25. order_id,customer_id,order_type
    26. from
    27. t2
    28. where customer_id2 is not null and order_type = 0
    1. # Write your MySQL query statement below
    2. with t1 as (select
    3. customer_id #至少有一个类型为0的订单的客户
    4. from
    5. Orders
    6. group by
    7. customer_id
    8. having
    9. sum(if(order_type=0,1,0)) > 0
    10. ),
    11. t2 as (
    12. select
    13. o.order_id,o.customer_id,o.order_type,t1.customer_id customer_id2
    14. from
    15. Orders o left join t1
    16. using(customer_id)
    17. )
    18. select
    19. order_id,customer_id,order_type #没有类型为0的订单的用户的所有内容
    20. from
    21. t2
    22. where customer_id2 is null
    23. union all
    24. select
    25. order_id,customer_id,order_type #至少有一个类型为0的订单,不要报告该客户的任何类型为1的订单 的所有内容
    26. from
    27. t2
    28. where customer_id2 is not null and order_type = 0

  • 相关阅读:
    MySQL高频面试题
    Cpolar内网穿透工具在windows和Linux上具体使用
    Android12之仿Codec2.0实现传递编解码器组件本质(四十六)
    IDEA 集成 Git、IDEA 集成 GitHub
    Java Web应用开发简介
    信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(五):有损传输线的特性阻抗和信号传输速度
    Java 中的线程池
    【httpd】 Apache http服务器目录显示不全解决
    史上最全的Go语言模块(Module)管理详解(基于Go1.19)
    iEnglish马铁鹰:智能教育塑造未来学习新范式
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125621861