個別の値に SUM() を使用して SQL で行をグループ化する
MySQL クエリで、次の値の合計を計算したいとします。各行が 1 回だけカウントされるようにしながら、変換テーブルを作成します。これを実現するには、DISTINCT キーワードを SUM() 関数と組み合わせて使用します。ただし、重複行によって SUM() の結果が増大するという問題が発生しています。
この問題を解決するには、テーブル内の主キーの関係を考慮してください。 conversions.id がコンバージョン テーブルの主キーであり、stats.id が統計テーブルの主キーである場合、各conversions.idは単一のlinks.idに対して一意です。
この理解に基づいて、クエリを再構築して、個別のconversions.idごとにconversions.valueの合計を計算し、その結果を各links.idグループ内の行の合計数で割ることができます。これにより、個別の値の目的の合計が得られます。
修正されたクエリは次のとおりです:
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;
このクエリは、各 links.id グループ内の個別のconversions.idごとにconversions.valueの合計を効果的に計算し、各行が1回だけカウントされるようにする必要があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3