ホームページ > データベース > mysql チュートリアル > 単一の PostgreSQL クエリで SUM() を使用してパーセンテージを効率的に計算するにはどうすればよいですか?

単一の PostgreSQL クエリで SUM() を使用してパーセンテージを効率的に計算するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-01 01:08:09
オリジナル
292 人が閲覧しました

How Can I Efficiently Calculate Percentages Using SUM() in a Single PostgreSQL Query?

単一 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;
ログイン後にコピー

このクエリは次の内容を受け取ります。ステップ:

  1. count(value_a = value_b OR NULL) を使用して、NULL 値に関係なく、value_a が value_b と等しい行の数をカウントします。
  2. 結果を合計数で除算します。 count(*) を使用してテーブル内の行を検索します。
  3. 結果を 100 倍して、

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート