MySQLのSELECTクエリで非グループ化フィールドと共にグループ関数を使用する方法
MySQLのSELECTクエリにおいて、グループ関数(集計関数)を非グループ化フィールド(GROUP BY句に含まれないカラム)と組み合わせて使用したい場合は、必ずGROUP BY句を指定する必要があります。GROUP BY句を明示することで、どのカラムを基準にレコードをグループ化するのかをMySQLに正しく伝えることができます。
基本構文
SELECT グループ関数1, …, 非グループカラム1, … FROM テーブル名 GROUP BY カラム名;
使用例
ここでは「Student」テーブルを使った具体的な例を紹介します。まず、COUNT(*)関数とidカラムを組み合わせたクエリを実行してみましょう。
mysql> Select COUNT(*), id from Student GROUP BY id; +----------+------+ | COUNT(*) | id | +----------+------+ | 1 | 1 | | 1 | 2 | | 1 | 15 | | 1 | 17 | | 1 | 20 | +----------+------+ 5 rows in set (0.00 sec)
次に、COUNT(*)関数とaddressカラムを組み合わせた例です。注目すべきは、SELECT句ではaddressを取得している一方で、GROUP BY句にはidカラムを指定している点です。
mysql> Select COUNT(*), address from Student GROUP BY id; +----------+---------+ | COUNT(*) | address | +----------+---------+ | 1 | Delhi | | 1 | Mumbai | | 1 | Delhi | | 1 | Shimla | | 1 | Jaipur | +----------+---------+ 5 rows in set (0.00 sec)
ポイント
GROUP BY句の後に指定するカラムは、SELECT文で指定した非グループ化フィールドと異なっていても問題ありません。上記の2番目の例のように、SELECT句でaddressカラムを取得しながら、GROUP BY句ではidカラムを基準にグループ化することが可能です。ただし、この場合の表示結果はグループ化の基準となるカラムの処理順序に依存するため、意図した結果を得るためにはGROUP BY句とSELECT句で同じカラムを指定することが推奨されます。
-
JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法
executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手
-
MySQLクエリでCASE条件を使ってカウントする方法
MySQLでは、CASE WHENを活用し、COUNT()関数の中にCASE条件を設定することで、特定の条件に一致するレコードだけを数えることができます。この仕組みが成り立つのは、COUNT()関数がNULL値を無視するためです。条件に合わない場合にNULLを返すことで、そのレコードはカウント対象から除外されます。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。 ); Query OK, 0 rows affected (0.61 sec)2. レコードの挿入続いて、insertコマンドを使ってテーブルにデータを登録します。mysql> insert into D