Oracle SQL 计算某列中的不同值
Posted
技术标签:
【中文标题】Oracle SQL 计算某列中的不同值【英文标题】:Oracle SQL Count distinct values in a certain column 【发布时间】: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
【问题讨论】:
【参考方案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
。
【讨论】:
以上是关于Oracle SQL 计算某列中的不同值的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL Query,用于拆分和计算列中的值的功能?