MySQLで特定の列の一意な行数(ユニーク件数)を取得する方法
MySQLでは、COUNT()関数を使うことでテーブル内の行数を簡単に取得できます。さらに、DISTINCTキーワードと組み合わせることで、重複する値を除外し、一意な(ユニークな)行のみの件数をカウントすることが可能です。
この記事では、実際にテーブルを作成し、データを挿入したうえで、一意な行数を取得する手順を具体的に解説します。
サンプルテーブルの作成
まず、以下のSQLを実行してテーブルを作成します。
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName varchar(10) ); Query OK, 0 rows affected (0.47 sec)
Id列には自動採番(AUTO_INCREMENT)の主キーを設定し、FirstName列に名前を格納するシンプルな構造です。
レコードの挿入
次に、INSERTコマンドを使ってテーブルに複数のレコードを挿入します。ここでは、意図的に同じ名前を複数回登録しています。
mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(FirstName) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.12 sec)
テーブルの内容を確認する
SELECT文で登録されたレコードを表示してみましょう。
mysql> select *from DemoTable;
このクエリを実行すると、以下のような結果が得られます。
+----+-----------+ | Id | FirstName | +----+-----------+ | 1 | Larry | | 2 | John | | 3 | Sam | | 4 | John | | 5 | John | | 6 | Larry | | 7 | Mike | | 8 | Robert | | 9 | Carol | | 10 | Mike | +----+-----------+ 10 rows in set (0.00 sec)
合計10件のレコードが登録されており、その中には「Larry」「John」「Mike」など重複した名前が含まれていることがわかります。
一意な行数だけをカウントする
重複行を除外して一意な行のみの件数を取得するには、COUNT(DISTINCT 列名)を使用します。
mysql> select count(distinct FirstName) from DemoTable;
このクエリを実行すると、以下の出力が得られます。
+---------------------------+ | count(distinct FirstName) | +---------------------------+ | 6 | +---------------------------+ 1 row in set (0.03 sec)
結果の解説
テーブルには10件のレコードがありますが、名前として存在するのは「Larry」「John」「Sam」「Mike」「Robert」「Carol」の6種類だけです。COUNT(DISTINCT ...)は重複を無視するため、結果は「6」と返されます。
このように、単純なCOUNT(*)やCOUNT(列名)ではなくCOUNT(DISTINCT 列名)を使うことで、重複データの中から固有の値の件数だけを効率よく集計できます。アンケートの回答者数やユーザーの重複排除など、実務でもよく使われるテクニックなので、ぜひ覚えておきましょう。
-
MySQLで選択した行のサイズを取得する方法|CHAR_LENGTH()関数の使い方
MySQLで選択した行のサイズを取得する方法MySQLで選択した行のサイズ(文字数)を取得するには、CHAR_LENGTH()関数を使用します。この関数は文字列の長さを返すため、SUM()関数と組み合わせることで、複数行にわたる合計サイズを簡単に算出できます。ここでは、実際にテーブルを作成しながら手順を詳しく解説していきます。ステップ1:テーブルを作成するまず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1612 -> ( -> Fi
-
MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829 ( Name varchar(