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

MySQLで特定の列に同じ値が出現する回数をカウントする方法

MySQLである列に同じ値が何回出現するかを調べたい場合、集計関数 COUNT()GROUP BY 句と組み合わせて使うことで簡単に実現できます。

基本構文

SELECT yourColumnName, COUNT(*) AS anyVariableName FROM yourTableName GROUP BY yourColumnName;

この構文では、指定した列の値ごとにレコードがグループ化され、それぞれの値が出現した回数がカウントされます。それでは、実際にテーブルを作成して動作を確認してみましょう。

サンプルテーブルの作成

まず、以下のクエリでテーブルを作成します。

mysql> CREATE TABLE CountSameValue
-> (
-> Id int,
-> Name varchar(100),
-> Marks int
-> );
Query OK, 0 rows affected (0.70 sec)

レコードの挿入

次に、INSERTコマンドを使ってテーブルにデータを挿入します。

mysql> INSERT INTO CountSameValue VALUES(1,'Sam',67);
Query OK, 1 row affected (0.17 sec)

mysql> INSERT INTO CountSameValue VALUES(2,'Mike',87);
Query OK, 1 row affected (0.19 sec)

mysql> INSERT INTO CountSameValue VALUES(3,'Carol',67);
Query OK, 1 row affected (0.24 sec)

mysql> INSERT INTO CountSameValue VALUES(4,'Bob',87);
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO CountSameValue VALUES(5,'John',71);
Query OK, 1 row affected (0.17 sec)

mysql> INSERT INTO CountSameValue VALUES(6,'Adam',66);
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO CountSameValue VALUES(7,'David',71);
Query OK, 1 row affected (0.20 sec)

mysql> INSERT INTO CountSameValue VALUES(8,'Maria',67);
Query OK, 1 row affected (0.16 sec)

登録データの確認

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

mysql> SELECT * FROM CountSameValue;

実行結果は以下の通りです。

+------+-------+-------+
| Id   | Name  | Marks |
+------+-------+-------+
| 1    | Sam   | 67    |
| 2    | Mike  | 87    |
| 3    | Carol | 67    |
| 4    | Bob   | 87    |
| 5    | John  | 71    |
| 6    | Adam  | 66    |
| 7    | David | 71    |
| 8    | Maria | 67    |
+------+-------+-------+
8 rows in set (0.00 sec)

値の出現回数をカウントするクエリ

ここからが本題です。「Marks(点数)」列に各値が何回出現するかをカウントするには、以下のようなクエリを実行します。

mysql> SELECT Marks, COUNT(*) AS Total FROM CountSameValue GROUP BY Marks;

実行結果は以下の通りです。

+-------+-------+
| Marks | Total |
+-------+-------+
| 67    | 3     |
| 87    | 2     |
| 71    | 2     |
| 66    | 1     |
+-------+-------+
4 rows in set (0.00 sec)

結果の読み方

この出力から、以下のことがわかります。

  • 点数「67」は3回出現(Sam、Carol、Maria)
  • 点数「87」は2回出現(Mike、Bob)
  • 点数「71」は2回出現(John、David)
  • 点数「66」は1回のみ出現(Adam)

このように、GROUP BY で対象の列をグループ化し、COUNT(*) で各行の件数を数えることで、特定の列における値の出現回数を一覧形式で取得できます。なお、AS Total の部分はエイリアス(別名)であり、任意の名前に変更可能です。また、出現回数の多い順に並べ替えたい場合は、クエリの末尾に ORDER BY Total DESC を追加すると便利です。

  1. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(

  2. MySQLクエリで列にユーザー定義の値を追加する方法

    MySQLでは、UNION ALLを活用することで、既存の列の値に加えて、ユーザーが自由に定義した値をクエリ結果に追加できます。ここでは、ENUM型の列を持つテーブルを例に、その具体的な手順を解説します。 1. サンプルテーブルの作成 まず、ENUM型のカラムを持つテーブルを作成します。 mysql> create table DemoTable1847      (      GameStatus ENUM(PENDING,COMPLETED,CANCELLED)      ); Query OK