【问题标题】:Oracle SQL Count distinct values in a certain columnOracle SQL 计算某列中的不同值
【发布时间】:2021-07-02 14:30:54
【问题描述】:

我正在尝试使用特定逻辑查询表,并且我想删除 PERSON_ID 列中计数为 2 个或更多不同值的记录。我找不到合适的窗口查询来实现这一点。我已经尝试过使用:

SELECT 
CUSTOMER_ID, PERSON_ID, CODE,
DENSE_RANK() OVER (PARTITION BY CUSTOMER_iD, PERSON_ID ORDER BY PERSON_ID ASC) AS NR 
FROM TBL_1;

但我得到以下结果:

我想实现下面的结果,它根据某个 CUSTOMER_ID 计算 PERSON_ID 列中的不同值。在我的情况下,客户“444333”将是我要删除的记录,因为它有 2 个不同的 Person_Id

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    这是你需要的:

    SELECT 
    customer_id, count(distinct PERSON_ID) distinct_person_count
    FROM TBL_1
    group by customer_id
    

    如果您想为 eahc 行显示它,您可以再次将其与表格连接:

    select * from TBL_1 t
    join (
         select customer_id, count(distinct PERSON_ID) distinct_person_count
         from TBL_1
         group by customer_id
    ) tt
    on t.customer_id = tt.customer_id
    

    注意:在窗口函数中不能有 distinct

    【讨论】:

      【解决方案2】:

      如果您想要每行的不同计数,请使用窗口函数:

      select t.*,
             count(distinct person_id) over (partition by customer_id)
      from t;
      

      Oracle确实在窗口函数中支持distinct

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多