【问题标题】:Finding duplicate values in multiple colums in a SQL table and count在 SQL 表的多个列中查找重复值并计数
【发布时间】:2023-03-14 01:04:01
【问题描述】:

我的表结构如下:

id num1 num2 num3  ...
 1    1    2    3
 2    1    3    2
 3    1    2    3
 .
 .
 .

我使用以下命令来显示重复项和计数:

SELECT COUNT(num1), num1, num2, num3 
FROM table 
GROUP BY num1, num2, num3 
HAVING (COUNT(num1) > 1) AND (COUNT(num2) > 1) AND (COUNT(num3) > 1)

这个命令给我的计数是 2。我想知道第二行如何也可以算作重复。

【问题讨论】:

  • 表中是否只有 3 个 num 列?
  • 是的和其他一些字符串列
  • 您是否考虑在 3 列中的任何一个中包含所有 3 个数字的重复行?
  • 这正是我要找的
  • 然后检查我的答案。

标签: sql sqlite group-by count


【解决方案1】:

您需要标量函数 MIN()MAX() 以升序获取每行的 3 个整数值,以便您可以创建一个唯一的三元组来分组:

SELECT COUNT(*) count,
       MIN(num1, num2, num3) num_1,
       num1 + num2 + num3 - MIN(num1, num2, num3) - MAX(num1, num2, num3) num_2,
       MAX(num1, num2, num3) num_3
FROM tablename 
GROUP BY num_1, num_2, num_3 
HAVING COUNT(*) > 1;

请参阅demo

【讨论】:

  • 这正是它应该做的。谢谢你。这是否也适用于 CHAR 而不是 Int?我有一个类似的人名用例
  • @MikaBA 不,这仅适用于数值。
  • 您对 char 有其他想法还是我应该问一个新问题?对这种情况感到抱歉。这两个话题都让我花了几个小时。
  • @MikaBA 对于非数值的要求或解决方案是不同的,因此您应该提出一个新问题,在其中解释您想要的示例数据和预期结果。
【解决方案2】:

将运算符更改为 OR 将返回您想要的内容

SELECT COUNT(num1), num1, num2, num3 
FROM table 
GROUP BY num1, num2, num3 
HAVING (COUNT(num1) > 1) OR (COUNT(num2) > 1) OR (COUNT(num3) > 1)

【讨论】:

  • 结果和之前一样
猜你喜欢
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
相关资源
最近更新 更多