MySQLでSELECTフィールドごとに条件を適用する方法:WHERE句の代わりにCASE式を使う
MySQLでSELECTフィールドごとに条件を適用するには
MySQLでは、WHERE句を使わなくても、SELECT文の中でCASE式を利用することで、フィールドごとに個別の条件を設定できます。ここでは、具体的なサンプルコードとともにその方法を解説します。
1. テーブルを作成する
まず、CREATE TABLE文でサンプル用のテーブルを作成します。
mysql> create table DemoTable1988 ( Value1 int, Value2 int, Price int ); Query OK, 0 rows affected (0.64 sec)
2. レコードを挿入する
続いて、INSERTコマンドでテーブルにデータを追加していきます。
mysql> insert into DemoTable1988 values(10,7,500); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable1988 values(7,9,400); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1988 values(8,7,200); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable1988 values(7,4,300); Query OK, 1 row affected (0.16 sec)
3. 登録したレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1988;
実行結果は以下のようになります。
+--------+--------+-------+ | Value1 | Value2 | Price | +--------+--------+-------+ | 10 | 7 | 500 | | 7 | 9 | 400 | | 8 | 7 | 200 | | 7 | 4 | 300 | +--------+--------+-------+ 4 rows in set (0.00 sec)
4. CASE式でSELECTフィールドごとに条件を適用する
ここが本題のポイントです。CASE式をSUM関数と組み合わせることで、WHERE句のように行全体を絞り込むのではなく、集計対象のフィールドごとに条件を適用できます。実際のクエリを見てみましょう。
mysql> select sum( case when Value2=7 then Price else 0 end)- sum( case when Value1=7 then Price else 0 end) as Result from DemoTable1988;
実行結果は以下の通りです。
+--------+ | Result | +--------+ | 0 | +--------+ 1 row in set (0.23 sec)
クエリの仕組み
このクエリでは、まず「Value2が7である行のPrice合計」を算出し、そこから「Value1が7である行のPrice合計」を差し引いています。CASE式のelse 0により、条件に一致しない行は0として扱われるため、WHERE句でフィルタリングした場合と同様の効果を、集計の中で柔軟に実現できるのです。
この手法は、同じテーブルに対して複数の異なる条件での集計を一度に行いたい場合などに特に便利です。ぜひ活用してみてください。
-
MySQLのSELECT文をカスタム変数に設定する方法
この記事では、MySQLでSELECT文(クエリ)の結果をカスタム変数(ユーザー定義変数)に設定する方法を解説します。まずサンプル用のテーブルを作成してデータを挿入し、その後SET句と「@」から始まる変数を使ってクエリを変数に格納する手順を、実際の実行例とともに見ていきましょう。 1. テーブルを作成する 最初に、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable2013 -> ( -> Name varchar(20)  
-
MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法
MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl