単一 SQL クエリでの SUM() からのパーセンテージの計算
PostgreSQL では、SUM を使用してパーセンテージを計算しようとするとエラーが発生する場合があります同じ SQL クエリ内で () を使用します。この問題は、例の nb_ok など、まだ存在しない列にアクセスしようとすると発生します。
最適化されたソリューション
より効率的で正確なアプローチパーセンテージを計算するには、次のクエリを使用します:
SELECT property_name, (count(value_a = value_b OR NULL) * 100) / count(*) AS pct FROM my_obj GROUP BY 1;
このクエリは次の内容を受け取ります。ステップ:
NULL 値の処理
count() 式で OR NULL を使用すると、NULL 値がカウントされなくなります。これは、テーブルに NULL 値が含まれている場合に重要です。これにより、不正な結果やゼロ除算エラーが防止されます。
小数桁の強制
小数桁を保持するにはその結果、100 の代わりに 100.0 を使用でき、その結果、次のことを回避できる数値計算が行われます。 truncation:
SELECT property_name, round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct FROM my_obj GROUP BY 1;
大文字と小文字を区別しない識別子の回避
PostgreSQL を使用する場合は、valueA など、引用符で囲まれていない大文字と小文字が混在する識別子を避けることをお勧めします。潜在的なエラーや混乱を避けるために、代わりに小文字の識別子を使用してください。
以上が単一の PostgreSQL クエリで SUM() を使用してパーセンテージを効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。