【问题标题】:Check if there are any duplicated orders检查是否有重复订单
【发布时间】:2021-03-23 03:30:12
【问题描述】:

您好,我有三张表,包括客户、联系人和订单。我需要检查表订单中是否有重复(输入错误的订单)。如果是,我需要返回餐桌客户的名字和姓氏,餐桌联系人的电子邮件,最后是订单和订单 ID。

我想通过查找更多具有相同 order_id 的订单来检查这些重复项。

【问题讨论】:

  • 这不是一个有效的聚合查询。另外,如何定义“重复订单”?解释以及示例数据和期望的结果会很有帮助。
  • 请提供样本数据和期望的结果。
  • 如果你有两个相同的order_id 和两个不同的customer_ids 怎么办?
  • 其实这种情况下order_id中的副本总是只有一个customer_id。
  • 对我来说,重复订单将是两个或多个具有相同 order_id 的订单。

标签: sql sqlite group-by count


【解决方案1】:

您可以使用窗口计数来识别order_idorders 表中多次出现的订单,然后加入其他表:

select co.firstname, co.lastname, cu.email, o.order_id, o.item, o.cnt
from (
    select o.*, count(*) over(partition by oder_id) as cnt
    from orders o
) o
inner join customers cu  on cu.customer_id = c.customer_id
inner join contacts  co  on co.customer_id = c.customer_id
where o.cnt > 1

【讨论】:

    【解决方案2】:

    您还需要加入此查询:

    SELECT order_id, COUNT(*) counter FROM orders GROUP BY order_id HAVING counter > 1
    

    返回重复的order_ids,不需要额外的聚合:

    SELECT DISTINCT c1.first_name, c1.last_name, c2.email, o.order_id, o.item, t.counter
    FROM orders o
    INNER JOIN (SELECT order_id, COUNT(*) counter FROM orders GROUP BY order_id HAVING counter > 1) t
    ON t.order_id = o.order_id
    LEFT JOIN customers c1  ON o.customer_id = c1.customer_id
    LEFT JOIN contacts  c2  ON o.customer_id = c2.customer_id
    

    【讨论】:

      【解决方案3】:

      你所描述的听起来像:

      having count(distinct o.order_id) > 1
      

      编辑:

      您有一个非常奇怪的数据模型,其中包含一个 orders 表和一个非唯一的 order_id。通常这被分成两个表,例如ordersorderlines

      无论如何,你似乎想要这样的东西:

      select o.order_id
      from orders o
      group by o.order_id
      having count(*) > 1;
      

      您可以将其用作子查询并加入其他信息,例如关于客户的信息。

      【讨论】:

      • 不知道为什么但结果不正确。我的示例订单表包含重复的订单,您可以看到订单 ID 号 3 和 6 在表中出现了两次。但是它们不在结果中。这是我的代码:SELECT c1.first_name, c1.last_name, c2.email, o.order_id, o.item FROM orders o LEFT JOIN customers c1 ON o.customer_id = c1.customer_id LEFT JOIN contacts c2 ON o.customer_id = c2.customer_id GROUP BY o.customer_id HAVING count (distinct o.order_id) > 1
      猜你喜欢
      • 1970-01-01
      • 2016-06-07
      • 2013-07-17
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2022-10-14
      相关资源
      最近更新 更多