2016-11-21 10 views
1

私はテーブルの下に、次のいる:重複カウント値の合計を取得する方法は?

CandidateId CandidateName 
    can132  Mazhar 
    can132  Mazhar 
    can133  Raj 
    can133  Raj 
    can134  Rahul 
    can134  Rahul 
    can134  Rahul 

重複を取得候補IDでの私のSQLクエリベース。

SELECT CandidateId, COUNT(*) as duplicate 
FROM Table_CandidateInfo_Preview 
GROUP BY CandidateId 
HAVING COUNT(*) > 1 
ORDER BY CandidateId 

右私は、出力の下に取得しています:

CandidateId  duplicate 
can132   2 
can133   2 
can134   3 

私はcand133 1、3つの候補Idは重複やcand132 1時間を持っているので、私のストアドプロシージャで私の出力パラメータを送信するために、最終的な値4ようになる必要があります時間とcan134 2時間。すべての和が4の値になります。

答えて

0

派生テーブル内にクエリをラップします(わずかに調整されています)。 SUMその重複した値:

select sum(duplicate) 
from 
(
    SELECT CandidateId, COUNT(*) - 1 as duplicate 
    FROM Table_CandidateInfo_Preview 
    GROUP BY CandidateId 
    HAVING COUNT(*) > 1 
) dt 
+0

はどうもありがとうございまし役立つと思います。このお試しください。 @ jarlh – zahed

+0

あなたはようこそ! – jarlh

+0

私の質問と同様、投票してください。 @jarlh – zahed

0

あなたが望むように思えるでしょう:

SELECT SUM(duplicate - 1) 
FROM (SELECT CandidateId, COUNT(*) as duplicate 
     FROM Table_CandidateInfo_Preview 
     GROUP BY CandidateId 
     HAVING COUNT(*) > 1 
    ) c; 

私はあなたがそれぞれの行の一意のIDを持っていた場合、あなたも行うことができることに注意したい:

select count(*) 
from Table_CandidateInfo_Preview cip 
where cip.id > (select min(cip2.id) 
       from Table_CandidateInfo_Preview cip2 
       where cip2.CandidateId = cip.CandidateId 
       ); 

私にとって、これは「重複」のより直接的なカウントのようです。私はまた、いくつかのデータベース(SQLite、Oracle、Postgresなど)には、この目的で使用できる形式の行識別子があることにも注意してください。

0
SELECT sum(result.duplicate) AS Summary FROM (
SELECT CandidateId, COUNT(*) as duplicate 
FROM Table_CandidateInfo_Preview 
GROUP BY CandidateId 
HAVING COUNT(*) > 1) as result 
  1. 私はそれが
関連する問題