MYSQL: 一意の行に sum() を使用する
SQL クエリでは、通常、sum() 関数は次の合計を計算するために使用されます。複数の行にわたる値。ただし、グループ化されたデータを操作する場合は、重複行を考慮することが重要です。この特定の質問では、ユーザーはコンバージョン テーブル内の各行の列Conversions.valueの合計を計算することを目的としています。
指定されたクエリでは、最初に sum(conversions.value) が誤ってカウントするという問題が発生します。 GROUP BY 句により、各行の値が複数回実行されます。これに対処するには、ユーザーは合計が一意の行に対してのみ計算されるようにする必要があります。
解決策は、複数のセットの要素を結合するデカルト積の概念を利用することにあります。この場合、セットは一意のクリック イベントとコンバージョン イベントです。 count(DISTINCTconversions.id) 関数は、重複するコンバージョン行を効果的に削除し、一意のコンバージョン イベントの数を提供します。
正しい合計を計算するには、ユーザーは sum(conversions.value) に個別のコンバージョン イベントの数を乗算します。変換を計算し、それを行の合計数で割ります (count(*))。この操作により、各リンクに関連付けられた一意のコンバージョン イベントのみに対して合計が計算されるようになります。
ソリューションで推奨される変更されたクエリは次のとおりです。
<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>
以上がグループ化された SQL クエリの一意の行の列の合計を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。