[解決済み] MySQLのSUM関数で値がない場合に'0'を返すようにするには?
2022-04-24 09:35:51
質問
MySQLに簡単な関数があるとします。
SELECT SUM(Column_1)
FROM Table
WHERE Column_2 = 'Test'
にエントリがない場合は
Column_
2 が 'Test' というテキストを含んでいる場合、この関数は
NULL
私は0を返したいのですが。
同じような質問がここで何度かされているのは知っていますが、回答を自分の目的に合わせることができないので、解決するための手助けをいただけるとありがたいです。
どのように解決するのですか?
使用方法
COALESCE
を使用すると、そのような結果を避けることができます。
SELECT COALESCE(SUM(column),0)
FROM table
WHERE ...
実際の動作を見るには、このsql fiddleをご覧ください。 http://www.sqlfiddle.com/#!2/d1542/3/0
詳細はこちら
3つの表(すべて数字の表、すべてNULLの表、混合表の表)がある。
MySQL 5.5.32 スキーマのセットアップ :
CREATE TABLE foo
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
val INT
);
INSERT INTO foo (val) VALUES
(null),(1),(null),(2),(null),(3),(null),(4),(null),(5),(null),(6),(null);
CREATE TABLE bar
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
val INT
);
INSERT INTO bar (val) VALUES
(1),(2),(3),(4),(5),(6);
CREATE TABLE baz
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
val INT
);
INSERT INTO baz (val) VALUES
(null),(null),(null),(null),(null),(null);
クエリ1 :
SELECT 'foo' as table_name,
'mixed null/non-null' as description,
21 as expected_sum,
COALESCE(SUM(val), 0) as actual_sum
FROM foo
UNION ALL
SELECT 'bar' as table_name,
'all non-null' as description,
21 as expected_sum,
COALESCE(SUM(val), 0) as actual_sum
FROM bar
UNION ALL
SELECT 'baz' as table_name,
'all null' as description,
0 as expected_sum,
COALESCE(SUM(val), 0) as actual_sum
FROM baz
結果 :
| TABLE_NAME | DESCRIPTION | EXPECTED_SUM | ACTUAL_SUM |
|------------|---------------------|--------------|------------|
| foo | mixed null/non-null | 21 | 21 |
| bar | all non-null | 21 | 21 |
| baz | all null | 0 | 0 |
関連
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] 関数名を文字列として取得するには?
-
[解決済み] MySQLで重複する値を検索する
-
[解決済み] mysqlデータベースのサイズを取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQL演算子(and, or, in, not)の具体的な使用方法
-
MySQLのNULLについて解説した記事
-
SpringBootのMySQLへの接続は、バックエンドのインターフェイスの操作方法を書き込むためのデータを取得するために
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
[解決済み] ユニークなテーブル/エイリアスではない
-
MySQLにおけるvarchar型とchar型の違い
-
[解決済み] Mysqlでidを使用してテーブルから多くの行を削除する
-
[解決済み] INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの違いは何ですか?[重複しています]。
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?