ホームページ >データベース >mysql チュートリアル >SQL SELECT クエリで一致する値の割合を計算するにはどうすればよいですか?

SQL SELECT クエリで一致する値の割合を計算するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 03:49:09800ブラウズ

How to Calculate the Percentage of Matching Values in a SQL SELECT Query?

同じ SELECT クエリ内の SUM() からパーセンテージを計算する

整数フィールド value_a と value_b が存在する my_obj テーブルでは、目標は、value_a が等しい回数のパーセンテージを決定することです。 value_b.

不正な試行:

select sum(case when o.value_a = o.value_b then 1 else 0 end) as nb_ok,
       sum(case when o.value_a != o.value_b then 1 else 0 end) as nb_not_ok,
       compute_percent(nb_ok,nb_not_ok)
from  my_obj as o
group by o.property_name;
クエリ内に nb_ok 列が存在しないため、このアプローチは失敗します。

最適化済み解決策:

SELECT property_name
      ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct
FROM   my_obj
GROUP  BY 1;

説明:

    演算子 = が OR よりも優先されるため、比較が最初に評価されます。
  • count(value_a = value_b OR NULL) は、NULL 値が確実に無視されます。
  • (count(value_a = value_b OR NULL) * 100) を count(*) で除算すると、パーセンテージが計算されます。
  • count(*) は、行の合計数を表します。 NULL値。

結果:

property_name | pct
--------------+----
 prop_1       | 17
 prop_2       | 43

小数桁の代替:

SELECT property_name
      ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct
FROM   my_obj
GROUP  BY 1;
このバリエーション小数点以下の桁を保持するために小数点以下の桁を導入します。

以上がSQL SELECT クエリで一致する値の割合を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。