私は野球選手(すべて1000人程度)のテーブルを持っています。
mysql> describe person;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| firstname | varchar(30) | NO | | NULL | |
| lastname | varchar(30) | NO | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
しかし、2度追加されたプレイヤーもいると思います。特定の名と姓のコンボの出現回数を調べて確認するにはどうすればよいですか?
これは重複のリストを提供します:
SELECT firstname, lastname, COUNT(*)
FROM person
GROUP BY firstname, lastname
HAVING COUNT(*) > 1;
すべての行のカウントを表示するには、having句を削除します。
SELECT firstname, lastname, COUNT(*)
FROM person
GROUP BY firstname, lastname;
SELECT firstname, lastname, count(id) count
FROM person
WHERE firstname = ?
AND lasttname = ?
GROUP BY firstname, lastname
コピー数の減少値でソートされたリストの場合:
SELECT firstname, lastname, COUNT(*) AS n
FROM person
GROUP BY firstname, lastname
ORDER BY n DESC
HAVING n > 1
HAVING
句は重要な部分です。結果をフィルタリングする必要がありますafter the GROUP BY
句。WHERE
句は行を除外するため、beforeはグループ化されます。
重複した名前と名前のIDを取得するには、次のようにします。
SELECT p1.id, p1.firstname, p1,lastname FROM person p1
INNER JOIN person p2 ON (p1.firstname = p2.firstname
AND p1.lastname = p1.lastname
AND p1.id <> p2.id);
単にすべての重複を消去したい場合は、一時テーブルを作成して、youre data except the duplicate and them re-update you
reプライマリテーブル。
重複するデータを選択するクエリは次のようになります
SELECT DISTINCT firstname, lastname FROM table
テーブルのデータの完全なリストを取得するには
SELECT firstname, lastname, COUNT(*) AS n
FROM person
GROUP BY firstname, lastname
ORDER BY lastname DESC
HAVING n > 1
この最後のクエリを使用すると、姓のアルファベット順に並べ替えられたデータのリストが表示されます。
テーブル内の重複するレコードを検索するには(例:重複するレコードのログイン名とパスワードの組み合わせを検索するには)、以下のクエリを使用します。
SELECT em.* FROM employee_master AS em JOIN
(SELECT emp.login, emp.password, COUNT(*)
FROM employee_master emp
WHERE emp.login != '' AND emp.password != ''
GROUP BY emp.login, emp.PASSWORD
HAVING COUNT(*) > 1
) AS dl
WHERE em.login = dl.login AND em.password = dl.password;