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