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

MySQLデータベースの列から一意(ユニーク)なレコード数をカウントする方法

MySQLである列に含まれる重複しない(一意の)レコード数を集計したい場合は、集計関数 COUNT(DISTINCT ...)GROUP BY 句と組み合わせて使用します。これにより、ユーザーごとの投稿メッセージ数のように、グループ単位での一意レコード数を簡単に取得できます。

実際にサンプルを使って確認してみましょう。

1. サンプルテーブルを作成する

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable
(
    UserName varchar(100),
    UserPostMessage text
);
Query OK, 0 rows affected (0.54 sec)

2. レコードを挿入する

次に、INSERT文を使っていくつかのレコードを追加します。

mysql> insert into DemoTable values('Chris','Hi');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('David','Hello');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Chris','Awesome');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Chris','Amazing');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David','Nice Place');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Chris','Amazing');
Query OK, 1 row affected (0.12 sec)

3. テーブルの内容を確認する

SELECT文ですべてのレコードを表示してみます。

mysql> select *from DemoTable;

実行すると、次のような結果が出力されます。

+----------+-----------------+
| UserName | UserPostMessage |
+----------+-----------------+
| Chris    | Hi              |
| David    | Hello           |
| Chris    | Awesome         |
| Chris    | Amazing         |
| David    | Nice Place      |
| Chris    | Amazing         |
+----------+-----------------+
6 rows in set (0.00 sec)

このように、Chrisは「Amazing」という同じメッセージを重複して投稿していることがわかります。

4. 一意のレコード数をカウントするクエリ

ここで本題です。COUNT(DISTINCT ...) を使うことで、重複した値を除外した上でカウントできます。ユーザーごとに一意のメッセージ投稿数を求めるクエリは次の通りです。

mysql> select UserName,count(DISTINCT UserPostMessage) AS NumberOfMessagesPostByUser from DemoTable group by UserName;

実行結果は以下のようになります。

+----------+----------------------------+
| UserName | NumberOfMessagesPostByUser |
+----------+----------------------------+
| Chris    |                          3 |
| David    |                          2 |
+----------+----------------------------+
2 rows in set (0.00 sec)

まとめ

Chrisは合計4件投稿していますが、「Amazing」が重複しているため、一意のメッセージ数は3件としてカウントされました。Davidも同様に2件と正しく集計されています。

このように、COUNT(DISTINCT 列名)GROUP BY を組み合わせれば、MySQLで特定の列の重複を除外したレコード数を簡単に集計することができます。単純な件数だけでなく、実質的なデータ数を知りたい場合に非常に便利なテクニックなので、ぜひ活用してください。

  1. MySQLで列のすべての日時レコードから秒を引く方法

    はじめにMySQLでは、INTERVAL演算子を使うことで、DATETIME型の列に格納されたすべての日時レコードから簡単に秒を引くことができます。この記事では、実際の例を通じてその手順をわかりやすく解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable833(ArrivalTime datetime);Query OK, 0 rows affected (0.79 sec)レコードの挿入INSERTコマンドを使用して、テーブルにいくつかのレコードを挿入します。mysql> insert into DemoTab

  2. MySQLで予約語「from」を列名として使用する方法

    MySQLで「from」を列名として使うには? MySQLでは「from」は予約語(リザーブドワード)として登録されているため、そのまま列名として使用するとエラーが発生します。しかし、バッククォート(`` ` ``)で囲むことで、予約語である「from」を列名として扱うことができます。 この記事では、実際にテーブルを作成し、「from」を列名としてデータの挿入や取得を行う手順を解説します。 1. バッククォートを使ってテーブルを作成する まず、列名「from」をバッククォートで囲んでテーブルを作成します。以下のSQLを実行してください。 mysql> create table Demo