回答:
HAVINGは優れた集約フィルターです。(http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html)たとえば、複数回出現するarticle_titlesを選択します。
SELECT count(*), article_title
FROM articles
GROUP BY article_title
HAVING COUNT(*) > 1;
SELECT句とGROUP BY句に列を追加すると、複数の列の複合キーに基づいて重複を見つけることができます。
article_titleという列を持つテーブルがあります。テーブル名がarticlesだとしましょう。article_titleデータが複数のレコードで同じであるレコードを見つける必要があります。
article_title
重複しているために基づいてレコードを検索したいので、IDも必要です
GROUP BYを使用した基本的なMIN / MAX(2回以上重複するとidが失われます)
SELECT
MIN(id) -- for FIFO id's (first id by duplicate)
, MAX(id) -- for LIFO id's (last id by duplicate)
, article_title
, COUNT(*)
FROM
articles
WHERE -- Maybe to filter out '' or IS NOT NULL
article_title != '' AND article_title IS NOT NULL
GROUP BY
article_title ASC
HAVING
COUNT(*) >= 2
;
または、非正規化に戻ってLIFO ID(重複する古いID)のCSVを生成しますが、ここですべてのIDを知っています。
SELECT
GROUP_CONCAT(id ORDER BY ASC SEPARATOR ',') -- change to DESC if want the last record first
, article_title
, COUNT(*)
FROM
articles
GROUP BY
article_title ASC
HAVING
COUNT(*) >= 2
;
GROUP BY
:mysqlperformanceblog.com/2006/09/06/...