计算在数据库中出现多次列字段的总数

时间:2017-03-13 13:30:13

标签: sql sql-server sql-server-2008 count

我正在尝试运行查询以获取一个名为“abc”的列的重复总数(出现多次)。我正在尝试这个但却无法实现。

select COUNT(SELECT DISTINCT card_no, COUNT(*)  AS cnt )

请提前帮助,谢谢。

以下示例是列:

cards
123,
456
,123

结果:

Count
1

123出现不止一次。

2 个答案:

答案 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 BYHAVING子句,它就可以在没有它的情况下有效地工作。

答案 1 :(得分:1)

SELECT
card_no, COUNT(*) AS "Occurrences"
FROM
YourTable
GROUP BY card_no
HAVING 
COUNT(*) > 1