MySQLで合計が150未満の列値のみを表示する方法|結果を降順に並べる
MySQLで合計が150未満の列値だけを表示するには?
条件に一致する行を抽出するには、サブクエリ(副問い合わせ)を利用するのが便利です。この記事では、Amount列の累積合計が150未満になる行のみを取り出し、結果を降順で表示する手順を、テーブル作成から順番に解説します。
1. サンプルテーブルを作成する
まず、次のようなテーブルを作成しましょう。
mysql> create table DemoTable844(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Amount int
);
Query OK, 0 rows affected (0.95 sec)
2. テストデータを挿入する
INSERT文を使って、いくつかのレコードを追加します。
mysql> insert into DemoTable844(Amount) values(80); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable844(Amount) values(100); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable844(Amount) values(60); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable844(Amount) values(40); Query OK, 1 row affected (0.36 sec) mysql> insert into DemoTable844(Amount) values(150); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable844(Amount) values(24); Query OK, 1 row affected (0.40 sec)
3. 登録されたレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。以下がそのクエリです。
mysql> select *from DemoTable844;
実行結果は次のとおりです。
+----+--------+ | Id | Amount | +----+--------+ | 1 | 80 | | 2 | 100 | | 3 | 60 | | 4 | 40 | | 5 | 150 | | 6 | 24 | +----+--------+ 6 rows in set (0.00 sec)
4. 合計が150未満の行だけを抽出する
ここからが本題です。サブクエリで「対象の行のAmount値以下のレコードの合計」を求め、その合計が150未満である行だけを取り出します。結果はORDER BY Amount DESCで降順に並べています。
mysql> select *from DemoTable844 tbl
where (select sum(Amount) from DemoTable844 where Amount <= tbl.Amount order by Amount) < 150
order by Amount desc;
実行結果は以下のとおりです。
+----+--------+ | Id | Amount | +----+--------+ | 3 | 60 | | 4 | 40 | | 6 | 24 | +----+--------+ 3 rows in set (0.26 sec)
クエリの仕組みを解説
このSQLでは、外側のクエリの各行に対してサブクエリが実行され、「その行のAmount以下の値を持つ全レコードの合計」が計算されます。合計が150以上になった時点で条件を満たさなくなるため、Amountが80・100・150の行は除外されます。
最後のORDER BY Amount DESCにより、抽出結果はAmountの降順(60 → 40 → 24)で表示されます。Idの昇順で並べたい場合は、ORDER BY Idに変更すればOKです。
-
MySQLで特定の列の値の文字数を取得し、合計を表示する方法
MySQLでは、CHAR_LENGTH()関数とSUM()関数を組み合わせることで、特定の列に格納された値の文字数を取得し、その合計を簡単に求めることができます。この記事では、実際のサンプルを使いながら、テーブルの作成から集計クエリの実行までの手順をわかりやすく解説します。テーブルを作成するまず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1612 -> ( -> FirstName varchar(20), &
-
MySQLのCASE文を使ってAmount列から条件別に2種類の合計値を同時に取得する方法
MySQLでは、CASE文を活用することで、1つのクエリ内で異なる条件ごとの合計値を複数同時に算出できます。例えば、Amount(金額)列から「全体の合計」と「特定条件を満たすレコードのみの合計」を一度に表示したい場合に非常に便利です。ここでは、具体的な手順をサンプルとともに解説します。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1794 ( Amount int ); Query OK, 0 rows affected (0.00 sec)2. テストデータの挿入INSERTコマンドを使って、