web-dev-qa-db-ja.com

サブクエリのカウントを合計する

特定の列に重複があるかどうかを確認するクエリを書いています。

SELECT COUNT(thecol) FROM thetable WHERE thecol IS NOT NULL GROUP BY thecol 
  HAVING COUNT(*) > 1

それは私に次のような出力を与えます

3
5
6

もちろん、colが一意ではないthecolの各値のレコード数はどれですか。

どうすれば合計14だけを取得できますか?既存のクエリをサブクエリとして使用する必要がありますか?

2
Anders Lindén

これはあなたが望むことをしますか?

SELECT SUM(x.records)
FROM 
(
    SELECT COUNT(thecol) AS records
    FROM thetable 
    WHERE thecol IS NOT NULL 
    GROUP BY thecol 
    HAVING COUNT(*) > 1
) AS x
4
Erik Darling

テーブルに別の列があることを必要とする別の方法(PRIMARY KEYまたはUNIQUE NOT NULL制約)。それをidと呼びましょう:

SELECT COUNT(*)
FROM thetable AS t
WHERE EXISTS
      ( SELECT 1
        FROM thetable AS t2
        WHERE t2.thecol = t.thecol
          AND t2.id <> t.id
      ) ;
2
ypercubeᵀᴹ