MySQLでテーブルの列に含まれる重複レコードの合計数をカウントする方法
サンプルテーブルの準備
まず、次のような stock_item というテーブルを例に考えてみましょう。このテーブルでは、quantity 列に重複した値が存在しています。具体的には、商品名「Notebooks(ノート)」と「Pencil(鉛筆)」の2行には同じ値「40」が格納され、「Shirts(シャツ)」「Shoes(靴)」「Trousers(ズボン)」の3行には同じ値「29」が格納されています。
mysql> Select * from stock_item; +------------+----------+ | item_name |quantity | +------------+----------+ | Calculator | 89 | | Notebooks | 40 | | Pencil | 40 | | Pens | 32 | | Shirts | 29 | | Shoes | 29 | | Trousers | 29 | +------------+----------+ 7 rows in set (0.00 sec)
重複値の確認
上記の結果を見ると、quantity 列には「40」と「29」という2つの重複値が存在していることがわかります。
重複レコード数をカウントするSQL
以下のクエリを実行すると、stock_item テーブルの quantity 列に含まれる重複値の合計数を取得できます。
mysql> Select count(*) AS Total_duplicate_count
-> FROM (SELECT item_name FROM stock_item
-> GROUP BY quantity HAVING COUNT(quantity) > 1) AS X;
+-----------------------+
| Total_duplicate_count |
+-----------------------+
| 2 |
+-----------------------+
1 row in set (0.00 sec)
クエリの仕組み
このクエリは、サブクエリと COUNT(*) を組み合わせた構造になっています。
- 内側のサブクエリ:
GROUP BY quantityで数量ごとに行をグループ化し、HAVING COUNT(quantity) > 1の条件により、2件以上出現している数量(ここでは「40」と「29」)だけを抽出します。 - 外側の COUNT(*):抽出されたグループの件数、すなわち「重複が存在する値の種類数」を合計として返します。
そのため、実行結果の「2」は、quantity 列の中で重複が発生している値が2種類あることを意味します。なお、重複している行そのものの総数ではなく、重複している値の種類数をカウントしたい場合に、このクエリ形式が適しています。
-
MySQLでテーブル内の各レコードの出現回数をカウントし、結果を新しい列として表示する方法
MySQLのテーブル内で同じ値が何回出現するかをカウントし、その結果を新しい列として表示したい場合があります。このような集計処理には、COUNT(*)関数とGROUP BY句を組み合わせて使用します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1942 ( Value int ); Query OK, 0 rows affected (0.00 sec) INSERTコマンドを使って、いくつかのレコードを挿入します。 mysql> insert into DemoTable
-
MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方
MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ