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 を追加すると便利です。
-
MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829 ( Name varchar(
-
MySQLクエリで列にユーザー定義の値を追加する方法
MySQLでは、UNION ALLを活用することで、既存の列の値に加えて、ユーザーが自由に定義した値をクエリ結果に追加できます。ここでは、ENUM型の列を持つテーブルを例に、その具体的な手順を解説します。 1. サンプルテーブルの作成 まず、ENUM型のカラムを持つテーブルを作成します。 mysql> create table DemoTable1847 ( GameStatus ENUM(PENDING,COMPLETED,CANCELLED) ); Query OK