ホームページ  >  記事  >  データベース  >  MySQL で個別の行の SUM() を計算するにはどうすればよいですか?

MySQL で個別の行の SUM() を計算するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-04 15:32:02385ブラウズ

How to Calculate SUM() for Distinct Rows in MySQL?

MySQL の個別の行の SUM()

MySQL クエリで SUM() 集計関数を利用する場合、どのようにするかを考慮することが重要です。正確な計算を保証するために、個別の行がカウントされます。この例では、目的は、個別のコンバージョンをカウントし、その値を合計することです。

元のクエリでは、SUM(conversions.value) 関数は、GROUP BY により各行の値を複数回カウントします。リンク.id。これを解決するには、個別のconversions.idについてのみconversions.valueを合計する必要があります。

綿密な分析により、conversions.idとstats.idの両方が主キーであることが明らかになりました。したがって、conversions.id ごとに一意の links.id があると想定できます。

望ましい結果を得るには、クリックとコンバージョンを表す 2 つのセットのデカルト積を利用できます。一意のコンバージョンの数は、count(distinctConversions.id) を使用して求めることができます。

コンバージョン値の合計は、一意のコンバージョンの数を合計数で割った値を乗算することで修正できます: sum(conversions.id)。 value)count(distinctConversions.id)/count()

この変更を組み込むと、次の修正されたクエリが生成されます:

SELECT links.id, 
   count(DISTINCT stats.id) as clicks, 
   count(DISTINCT conversions.id) as conversions, 
   sum(conversions.value)*count(DISTINCT conversions.id)/count(*) as conversion_value 
FROM links 
LEFT OUTER JOIN stats ON links.id = stats.parent_id 
LEFT OUTER JOIN conversions ON links.id = conversions.link_id 
GROUP BY links.id 
ORDER BY links.created desc;

この洗練されたクエリにより、重複行が効果的に削除されます。コンバージョン値の計算で、個別のコンバージョンの正確な合計を保証します。

以上がMySQL で個別の行の SUM() を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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