MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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種類あることを意味します。なお、重複している行そのものの総数ではなく、重複している値の種類数をカウントしたい場合に、このクエリ形式が適しています。

  1. MySQLでテーブル内の各レコードの出現回数をカウントし、結果を新しい列として表示する方法

    MySQLのテーブル内で同じ値が何回出現するかをカウントし、その結果を新しい列として表示したい場合があります。このような集計処理には、COUNT(*)関数とGROUP BY句を組み合わせて使用します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1942 ( Value int ); Query OK, 0 rows affected (0.00 sec) INSERTコマンドを使って、いくつかのレコードを挿入します。 mysql> insert into DemoTable

  2. 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コマンドを使ってテ