ホームページ > データベース > mysql チュートリアル > 単一の SQL SELECT ステートメント内の COUNT() からパーセンテージを効率的に計算するにはどうすればよいですか?

単一の SQL SELECT ステートメント内の COUNT() からパーセンテージを効率的に計算するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-03 20:15:40
オリジナル
341 人が閲覧しました

How Can I Efficiently Calculate Percentages from a COUNT() in a Single SQL SELECT Statement?

SQL の同じ SELECT ステートメント内の SUM() からパーセンテージを計算する

整数フィールド value_a および value_b を持つテーブル my_obj のコンテキスト内を使用すると、value_a が value_b と等しい行の割合を計算できます。最初のクエリはストアド プロシージャを使用してこれを達成しようとしましたが、エラーが発生しました。

簡略化されたより効率的なソリューション

より単純で高速なアプローチは次のとおりです。

SELECT property_name
      ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct
FROM   my_obj
GROUP  BY 1;
ログイン後にコピー
このクエリ:

    count(value_a = value_b OR NULL) という式を使用して、value_a が value_b と等しい行の数を数えることにより、パーセンテージの分子を計算します。 OR NULL により、等価比較で NULL 値が FALSE として扱われるようになります。
  • count(*) を使用してパーセンテージの分母を計算します。これは、NULL 値を持つ行を含むすべての行をカウントします。
  • 分子を分母で割ってパーセンテージを取得し、それをエイリアスに割り当てますpct.

NULL 値の処理

このソリューションは、不正な結果やゼロ除算エラーを引き起こす可能性がある元のクエリとは異なり、NULL 値を適切に処理します。 .

10 進数の保持Digits

結果で 10 進数を保持するには、クエリを次のように変更します。

SELECT property_name
      ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct
FROM   my_obj
GROUP  BY 1;
ログイン後にコピー
この変更では、分子に 100.0 を乗算して数値精度を強制し、round() を使用します。 10 進数の桁数を指定するには

結論

簡略化されたクエリまたは 10 進数を保存した変更されたクエリを使用することにより、同じ SELECT ステートメント内で SUM() からパーセンテージを効果的に計算できます。 NULL 値を適切に指定します。

以上が単一の SQL SELECT ステートメント内の COUNT() からパーセンテージを効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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