個別の値に SUM() を使用して SQL で行をグループ化する
MySQL クエリで、次の値の合計を計算したいとします。各行が 1 回だけカウントされるようにしながら、変換テーブルを作成します。これを実現するには、DISTINCT キーワードを SUM() 関数と組み合わせて使用します。ただし、重複行によって SUM() の結果が増大するという問題が発生しています。
この問題を解決するには、テーブル内の主キーの関係を考慮してください。 conversions.id がコンバージョン テーブルの主キーであり、stats.id が統計テーブルの主キーである場合、各conversions.idは単一のlinks.idに対して一意です。
この理解に基づいて、クエリを再構築して、個別のconversions.idごとにconversions.valueの合計を計算し、その結果を各links.idグループ内の行の合計数で割ることができます。これにより、個別の値の目的の合計が得られます。
修正されたクエリは次のとおりです:
<code class="sql">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;</code>
このクエリは、以下の個別のConversions.idごとにconversions.valueの合計を効果的に計算します。各 links.id グループ。各行が 1 回だけカウントされるようにします。
以上がSQL で各行が 1 回だけカウントされるようにしながら値の合計を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。