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

MySQLで製品ごとの平均価格が指定値未満の製品をSELECTする方法

MySQLでは、GROUP BY句HAVING句を組み合わせることで、「製品ごとの平均価格」が特定の値より小さい製品だけを抽出できます。この記事では、実際にテーブルを作成し、データの挿入から条件付きの抽出までを手順を追って解説します。

1. テーブルの作成

まず、製品IDと製品価格を格納するテーブルを作成します。

mysql> create table DemoTable848(
    ProductId int,
    ProductPrice int
);
Query OK, 0 rows affected (1.20 sec)

2. レコードの挿入

INSERTコマンドを使用して、テーブルに複数のレコードを挿入します。

mysql> insert into DemoTable848 values(100,30);
Query OK, 1 row affected (0.57 sec)
mysql> insert into DemoTable848 values(101,50);
Query OK, 1 row affected (1.06 sec)
mysql> insert into DemoTable848 values(100,40);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable848 values(101,25);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable848 values(100,20);
Query OK, 1 row affected (0.31 sec)

3. 登録データの確認

SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable848;

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

+-----------+--------------+
| ProductId | ProductPrice |
+-----------+--------------+
| 100      | 30          |
| 101      | 50          |
| 100      | 40          |
| 101      | 25          |
| 100      | 20          |
+-----------+--------------+
5 rows in set (0.00 sec)

4. 平均価格が指定値未満の製品を抽出するクエリ

「製品ごとの平均価格」が特定の値より小さい製品を取得するには、以下のようなクエリを実行します。ここでは、平均価格が35未満という条件で抽出しています。

mysql> select ProductId,avg(ProductPrice) from DemoTable848 group by ProductId having AVG(ProductPrice) < 35;

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

+-----------+-------------------+
| ProductId | avg(ProductPrice) |
+-----------+-------------------+
| 100      | 30.0000          |
+-----------+-------------------+
1 row in set (0.00 sec)

5. クエリのポイント解説

このクエリでは、まずGROUP BY句によってProductIdごとにレコードがグループ化されます。その後、HAVING句でグループ化後の集計値(AVG(ProductPrice))に対して条件(35未満)を適用しています。

結果として、ProductId 100の平均価格は (30 + 40 + 20) ÷ 3 = 30.0000 となり条件を満たすため抽出され、ProductId 101の平均価格は (50 + 25) ÷ 2 = 37.5000 となるため除外されます。

なお、WHERE句はグループ化する前の個々の行に対して適用されるのに対し、HAVING句はグループ化・集計後の結果に適用される点が重要です。「平均価格」といった集計値で絞り込む場合は、必ずHAVING句を使用してください。

  1. MySQLのWHERE句で日付の差を計算して行を抽出する方法(TIMESTAMPDIFFの使い方)

    MySQLでは、TIMESTAMPDIFF() 関数を使うことで、日時同士の差分を計算し、その結果に基づいてWHERE句で行を絞り込むことができます。ここでは、指定した日時との差が5分以内のレコードを抽出する例を紹介します。サンプルテーブルの作成まず、datetime型のカラムを持つテーブルを作成しましょう。mysql> create table demo42 -> ( -> start_date datetime -> ); Query OK, 0 rows affected (0.77 sec)テーブルへのデータ挿入次に、INSERT文を使っていくつかの日時データを

  2. MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法

    MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl