sql >> データベース >  >> RDS >> Mysql

個別の行のMYSQLsum()

    私は間違っているかもしれませんが、私が理解していることから

    • Conversions.id 主キーです テーブルのコンバージョン
    • stats.id 主キーです テーブルの統計

    したがって、conversions.idごとに、最大で1つのlinks.idが影響を受けます。

    あなたが要求するのは、2セットのデカルト積を行うのと少し似ています:

    [clicks]
    SELECT *
    FROM links 
    LEFT OUTER JOIN stats ON links.id = stats.parent_id 
    
    [conversions]
    SELECT *
    FROM links 
    LEFT OUTER JOIN conversions ON links.id = conversions.link_id 
    

    リンクごとに、sizeof([clicks])x sizeof([conversions])行を取得します

    ご指摘のとおり、リクエスト内の一意のコンバージョン数は、

    を介して取得できます。
    count(distinct conversions.id) = sizeof([conversions])
    

    この明確なものは、デカルト積のすべての[クリック]行をなんとか削除します

    しかし明らかに

    sum(conversions.value) = sum([conversions].value) * sizeof([clicks])
    

    あなたの場合、以来

    count(*) = sizeof([clicks]) x sizeof([conversions])
    count(*) = sizeof([clicks]) x count(distinct conversions.id)
    

    あなたが持っている

    sizeof([clicks]) = count(*)/count(distinct conversions.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;
    

    投稿してください!ジェローム



    1. OracleDatabaseのすべてのトリガーを一覧表示します

    2. OracleのNVL()関数

    3. 複数の行を挿入すると、重複はどうなりますか?

    4. SpotlightCloudをセットアップしてSQLServerを効率的にトラブルシューティングする方法