26

私は次の構造のテーブルを持っています。

tbl

id   name  
1    AAA
2    BBB
3    BBB
4    BBB
5    AAA
6    CCC

select count(name) c from tbl
group by name having c >1

この結果を返すクエリ:

AAA(2)  duplicate
BBB(3)  duplicate
CCC(1)  not duplicate

AAAとBBBとして重複している名前。最終的な結果は、この重複レコードの数です。

結果は次のようになります。重複製品の総数(2

4

7 に答える 7

45

アプローチは、重複ごとに1行のネストされたクエリと、内部クエリの結果の数だけを返す外部クエリを用意することです。

SELECT count(*) AS duplicate_count
FROM (
 SELECT name FROM tbl
 GROUP BY name HAVING COUNT(name) > 1
) AS t
于 2012-09-21T10:24:16.067 に答える
14

IFステートメントを使用して、目的の出力を取得します。

SELECT name, COUNT(*) AS times, IF (COUNT(*)>1,"duplicated", "not duplicated") AS duplicated FROM <MY_TABLE> GROUP BY name

出力:

AAA 2 duplicated
BBB 3 duplicated
CCC 1 not duplicated
于 2012-09-21T10:29:55.473 に答える
13

リストの場合:

SELECT COUNT(`name`) AS adet, name
FROM  `tbl` WHERE `status`=1 GROUP BY `name`
ORDER BY `adet`  DESC

テーブルビュー

総数の場合:

    SELECT COUNT(*) AS Total
    FROM (SELECT COUNT(name) AS cou FROM tbl GROUP BY name HAVING cou>1 ) AS virtual_tbl 

//合計:5

于 2016-02-22T10:25:21.300 に答える
11

これをサブクエリでラップしないのはなぜですか?

SELECT Count(*) TotalDups
FROM
(
    select Name, Count(*)
    from yourTable
    group by name
    having Count(*) > 1
) x

SQL FiddlewithDemoを参照してください

于 2012-09-21T10:23:48.027 に答える
6

受け入れられた回答は、重複の量ではなく、重複のある行の数をカウントします重複の実際の数をカウントする場合は、次を使用します。

SELECT COALESCE(SUM(rows) - count(1), 0) as dupes FROM(

    SELECT COUNT(1) as rows
    FROM `yourtable`
    GROUP BY `name`
    HAVING rows > 1

) x

これは、group byで重複を合計しますが、重複があるレコードの量を差し引きます。その理由は、group by totalがすべて重複しているわけではなく、これらの各グループの1つのレコードが一意の行であるためです。

フィドル:http ://sqlfiddle.com/#!2/29639a/3

于 2014-12-14T00:45:56.957 に答える
0

SQLコードは次のとおりです。

SELECT VERSION_ID, PROJECT_ID, VERSION_NO, COUNT(VERSION_NO) AS dup_cnt
FROM MOVEMENTS
GROUP BY VERSION_NO
HAVING (dup_cnt > 1 && PROJECT_ID = 11660)
于 2015-11-28T12:01:37.027 に答える
0

PHPの自分のテーブルにこのクエリを使用していますが、結果は1つだけですが、ユーザー名ごとの重複の量を知りたいのですが、それは可能ですか?

SELECT count(*) AS duplicate_count
FROM (
 SELECT username FROM login_history
 GROUP BY username HAVING COUNT(time) > 1
) AS t;
于 2022-02-16T11:21:29.993 に答える