はじめに
コジマです。
SQL ServerでSQLを書いていると
「Warning: Null value is eliminated by an aggregate or other SET operation. 」
というWarningが発生することがあります。
結論これが発生していたとしてシステムが落ちたりはしないんですけど、
システム開発で組み込んだりすると後々めんどくさいことになるのでこういったWarningは取り除いておいたほうがよいです。
<
h2>原因/h2>
このWarningは和訳すると
「警告:null値は、集計またはその他のSET操作によって削除されます。」
となります。
SUM()やCOUNT()などの集約関数を使用するときに
集約するカラムのレコードにNULLが含まれていると発生します。
その際、NULL値を無視して計算が行われます。
対処
こんなテーブルで本Warningが発生したとします。
イメージ:商品テーブルから商品カテゴリごとに合計金額を算出。
しかし、一部金額未設定の商品があり、本Warningが検出された。
BEFORE SELECT category_id , sum(price) total_price FROM products GROUP BY category_id ;
以下に2例紹介します。
要するにNULLを含めたくないということなので
この他にもやりようはあるはず。
1:NULL値を別のレコードに置き換える
AFTER1 SELECT p.category_id , sum(p.price) total_price FROM ( SELECT category_id ISNULL(price, 0) price -- NULLを0として扱う FROM products ) p GROUP BY p.category_id ;
2:NULLレコードをはじいておく
AFTER1 SELECT p.category_id , sum(p.price) total_price FROM ( SELECT category_id price FROM products WHERE price IS NOT NULL ) p GROUP BY p.category_id ;
さいごに
Warning: Null value is eliminated by an aggregate or other SET operation. の原因と対処
についてまとめました。
ここでは触れなかったですが、OUTER JOINなどしてNULL行ができたりしても発生可能性があるので
もし見かけたときはまずテーブル定義やSQLの確認をしてくださいね。
もっと学びたい人はこちら
SQLをもっと学びたいエンジニアのためにおすすめのUdemy講座を紹介いたします!
SQLはじめましての人!まずあなたの3時間をください。
この講座でまずこれだけは覚えてくれ!という内容をしっかり押さえることができます。
SQLはプログラミング言語がなんであれ、システム開発に必要になります。
この講座を見て最低限必要な知識を身に着けて実践で貢献できるようになりましょう!
3時間で学ぶ SQL ・データベース 超入門【丁寧な解説+演習問題で SQL データ抽出の基本が身につく】標準 SQL
データベースの設計について学べる講座です。
設計について学べる教材は少ないので、実務でデータベースを触る人にはとてもうれしい講座です。
データベース講座1:データベース論理設計
ちょっとニッチに感じるかもしれませんが、SQLのインデックスを学ぶことができる講座です。
よい性能でSQLを運用するためにはインデックスの理解は必要不可欠です。
CRUD書いて満足するエンジニアを出し抜きましょう。
SQLServerのインデックスを理解して検索を速くする方法
気になった人はぜひ見てみてくださいね!
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
以上、コジマでした。