我正在尝试运行查询以获取一个名为“abc”的列的重复总数(出现多次)。我正在尝试这个但却无法实现。
select COUNT(SELECT DISTINCT card_no, COUNT(*) AS cnt )
请提前帮助,谢谢。
以下示例是列:
cards
123,
456
,123
结果:
Count
1
123出现不止一次。
答案 0 :(得分:4)
您希望列中的重复值的数量至少重复一次,是吗?
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
子句,它就可以在没有它的情况下有效地工作。
答案 1 :(得分:1)
SELECT
card_no, COUNT(*) AS "Occurrences"
FROM
YourTable
GROUP BY card_no
HAVING
COUNT(*) > 1