【问题标题】:Get total count of duplicates in column获取列中重复项的总数
【发布时间】:2021-03-14 11:15:53
【问题描述】:

我需要一个查询来计算表中重复的总数,有什么办法吗?

如果我有这样的表:

+------------+----------+
| item_name  |quantity  |
+------------+----------+
| Calculator |       89 |
| Notebooks  |       40 |
| Pencil     |       40 |
| Pens       |       32 |
| Shirts     |       29 |
| Shoes      |       29 |
| Trousers   |       29 |
+------------+----------+

我不能使用SELECT COUNT(quantity),因为它返回 2。(40 | 29)

我怎样才能返回 5? (40 | 40 | 29 | 29 | 29)

【问题讨论】:

    标签: sql count duplicates


    【解决方案1】:

    使用解析函数:

    WITH cte AS (
        SELECT *, COUNT(*) OVER (PARTITION BY quantity) cnt
        FROM yourTable
    )
    
    SELECT COUNT(*)
    FROM cte
    WHERE cnt > 1;
    

    【讨论】:

    • 您的解决方案似乎有效,除了我认为应该将 SELECT COUNT(*) 更改为 SELECT SUM(cnt)
    • 我不同意,至少如果您期望样本表中的计数为 5。
    • 是的,你是对的,我看错了表格
    【解决方案2】:

    一种方法使用两个级别的聚合:

    select sum(cnt)
    from (select quantity, count(*) as cnt
          from t 
          group by quantity
         ) t
    where cnt > 1;
    

    有趣的是,如果您想要“3”——重复的行数,您可以将其表示为:

    select count(*) - count(distinct quantity)
    from t;
    

    但这不是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 2021-08-08
      • 2020-10-13
      • 2015-06-25
      相关资源
      最近更新 更多