【问题标题】:How to find duplicate count among several columns?如何在多列中查找重复计数?
【发布时间】:2026-01-19 07:25:01
【问题描述】:

这是一个模仿我的场景的示例表:

COL_1   COL_2   COL_3   COL_4   LAST_COL
A       P       X       NY      10
A       P       X       NY      11
A       P       Y       NY      12
A       P       Y       NY      13
A       P       X       NY      14
B       Q       X       NY      15
B       Q       Y       NY      16
B       Q       Y       CA      17
B       Q       Y       CA      18

LAST_COL 是主键,因此每次都会不同。

我想忽略 LAST_COL 并收集与其余 4 列相关的一些统计信息。

基本上,我的表中有数百万行,我想知道哪一组 COL_1, COL_2, COL_3 and COL_4 的行数最多。

所以,我想要一个查询,它可以输出所有唯一行及其出现次数。

COL_1   COL_2   COL_3   COL_4   TOTAL
A       P       X       NY      3
A       P       Y       NY      2
B       Q       X       NY      1
B       Q       Y       NY      1
B       Q       Y       CA      2

感谢任何帮助我的人。

*我正在使用 MS SQL,如果这有什么不同的话。

【问题讨论】:

  • 我忘了提到该解决方案应该可以扩展到多个列。问题中的示例是为了简单起见,但我想在 6 到 7 列上运行统计查询。

标签: sql database sql-server-2005 tsql


【解决方案1】:
SELECT COL_1, COL_2, COL_3, COL_4, COUNT(*)
FROM MyTable
GROUP BY COL_1, COL_2, COL_3, COL_4

如果您想清除没有重复的行:

SELECT COL_1, COL_2, COL_3, COL_4, COUNT(*)
FROM MyTable
GROUP BY COL_1, COL_2, COL_3, COL_4
HAVING COUNT(*) > 1

【讨论】:

    【解决方案2】:

    GROUP BY 是您想要的。例如:

    SELECT COL_1, COL_2, COL_3, COL_4, COUNT(*)
    FROM my_table
    GROUP BY COL_1, COL_2, COL_3, COL_4
    

    【讨论】:

      【解决方案3】:

      如果我理解正确,您所需要的只是:

      SELECT COL_1,COL_2,COL_3,COL_4, COUNT(*) AS TOTAL
      FROM table
      GROUP BY COL_1,COL_2,COL_3,COL_4
      

      【讨论】:

        【解决方案4】:

        拥有最多的行数

        所以你要数数,然后 ORDER BY the count DESC

        SELECT    COL_1, COL_2, COL_3, COL_4, COUNT(*) COUNT_ROWS
        FROM      TBL
        GROUP BY  COL_1, COL_2, COL_3, COL_4
        ORDER BY  COUNT_ROWS DESC
        

        【讨论】: