我正在尝试运行查询以获取一个称为" ABC"的列的重复总数(不止一次出现)。我正在尝试但无法实现。
select COUNT(SELECT DISTINCT card_no, COUNT(*) AS cnt )
请帮助,谢谢。
例如,以下是列:
cards
123,
456
,123
结果:
Count
1
AS 123出现不止一次。
您想要至少重复一次的列中不同值的数量,是吗?
SELECT COUNT(dupes)
FROM (SELECT card_no AS dupes, COUNT(*) cnt FROM table_name
GROUP BY card_no HAVING COUNT(*) > 1) A
编辑说明。
内部查询SELECT card_no AS dupes, COUNT(*) cnt FROM table_name GROUP BY card_no HAVING COUNT(*) > 1
仅返回表中重复的值。列上的别名是必要的,因为它是一个子查询。您可以独立于外部查询来运行此查询,以查看其返回的结果。
您必须在汇总其他字段时不想汇总的任何字段(例如执行记录计数),而HAVING
零件是过滤出任何不筛选的任何内容重复(即,计数为1)。HAVING
是在WHERE
中无法使用的聚合字段上应用过滤的方法。
外部查询SELECT COUNT(dupes)...
仅计算内部查询返回的card_no值的数量。由于这些分组,它给出了重复的不同值的数量。
A
最后为子查询设置了一个别名,因此可以像查询其他地方一样引用它。这对于另一个查询的FROM
子句中的任何子查询都是必需的。有效地,外部查询中的选择读取SELECT COUNT(A.dupes)...
,并且没有别名A
,就无法从dupes字段中参考从何处参考(即使在这种情况下是暗示)。
也值得注意的是,在查询中没有在其他任何地方使用该字段COUNT(*) cnt
的SELECT
。只要您仍然具有GROUP BY
和HAVING
条款,它将有效地工作。
SELECT
card_no, COUNT(*) AS "Occurrences"
FROM
YourTable
GROUP BY card_no
HAVING
COUNT(*) > 1