【问题标题】:How to count count customers that have only 1 product / all products如何计算只有一种产品/所有产品的客户
【发布时间】:2021-10-07 06:02:58
【问题描述】:

我有这样的表:

id name product
1 Ben x
2 Ann y
3 Kate y
4 John x
4 John y

我想知道:

  1. 如何统计只有 x 产品的客户?
  2. 如何计算同时拥有这两种产品的客户?

【问题讨论】:

  • 当问题是关于 SQL 时,请不要标记 PL/SQL 或桌面工具。 PL/SQL 不是一种查询语言,“SQL Developer”和“PL/SQL Developer”标签与使用 SQL 和 PL/SQL 的开发人员无关。

标签: sql oracle


【解决方案1】:

您可以使用这两个查询来完成工作

  1. 如何统计只有 x 产品的客户?
select t.ID, t.NAME
from t
group by t.ID, t.NAME
having count(distinct t.PRODUCT) = 1 
  and max(t.PRODUCT) = 'x'
;
  1. 如何计算同时拥有这两种产品的客户? 您可以为此使用此分析解决方案
select distinct ID, NAME
from (
select t.ID, t.NAME, t.PRODUCT, count(distinct t.PRODUCT)over(partition by t.ID ) cnt
from t
where t.PRODUCT in ('x', 'y')
)
where cnt > 1

或者你也可以使用这个聚合解决方案

select t.ID, t.NAME
from t
where t.PRODUCT in ('x', 'y')
group by t.ID, t.NAME
having listagg(t.PRODUCT, ',')within group (order by t.PRODUCT) like '%x,y%'
;

这里我为 listagg 聚合函数使用了逗号分隔符,因为我假设您的产品名称都不包含逗号“,”。否则,您需要为 listagg 函数正确选择所有者分隔符。

demo

【讨论】:

    【解决方案2】:

    仅适用于 x 产品:

    SELECT COUNT(*) FROM TABLE_NAME
    WHERE PRODUCT='x'
    

    对于这两种产品:

    SELECT COUNT(DISTINCT(NAME)) FROM TABLE_NAME
    

    对于只有 x 个产品的客户:

    SELECT PRODUCT, COUNT(NAME) FROM TABLE_NAME 
    WHERE PRODUCT='x' GROUP BY PRODUCT
    

    【讨论】:

    • 但是约翰同时拥有 x 和 y 产品。我想统计只有 x 个产品的客户,例如:Ben。
    • 抱歉,我误解了这个问题。然后,试试这个:SELECT PRODUCT, COUNT(NAME) FROM TABLE_NAME WHERE PRODUCT='x' GROUP BY PRODUCT
    • @MəhəmmədOcaqzadə:将来,请编辑您的答案以包括更正或更新,而不是简单地在 cmets 中回复。我已代表您将您的提案编辑为您的答案。在此期间,我还改进了格式,使其更具可读性。
    猜你喜欢
    • 1970-01-01
    • 2010-10-16
    • 2022-07-11
    • 2016-07-28
    • 2021-08-24
    • 2020-10-01
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多