【问题标题】:Selecting all names with more than 1 code选择具有超过 1 个代码的所有名称
【发布时间】:2017-01-30 12:08:08
【问题描述】:

我有以下查询,但它没有给出预期的结果。

SELECT 
    FIRST_NAME + ' ' + LAST_NAME , ORDER_CODE 
FROM 
    CUSTOMER
HAVING 
    COUNT(ORDER_CODE) > 1

我想查看具有 2 个或多个唯一 order_code 的所有组合的名字和姓氏。我该如何查询?

【问题讨论】:

  • 您使用的是哪个 dbms? (答案可能因产品而异。)
  • 您需要返回 order_codes 还是只返回名称?
  • 只是名字应该没问题
  • FIRST_NAME + ' ' + LAST_NAME 是无效的标准 SQL - 您使用的是哪个 DBMS?

标签: sql count having


【解决方案1】:

我想你想要count(distinct)group by

SELECT (FIRST_NAME + ' ' + LAST_NAME), ORDER_CODE 
FROM CUSTOMER
GROUP BY (FIRST_NAME + ' ' + LAST_NAME)
HAVING COUNT(DISTINCT ORDER_CODE) > 1;

这也假设FIRST_NAMELAST_NAME 永远不是NULL

【讨论】:

    【解决方案2】:

    将名称连接部分包装在派生表中 - 以避免重复连接代码。

    GROUP BY 其结果并使用 HAVING COUNT DISTINCT 仅返回具有多个不同 order_code 的名称:

    select full_name
    from
    (
        select FIRST_NAME + ' ' + LAST_NAME as full_name, ORDER_CODE
        FROM CUSTOMER
    ) dt
    group by full_name
    having count(distinct ORDER_CODE) > 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 2019-11-11
      • 2023-02-03
      • 2020-03-19
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多