bugfix> sql > 投稿

私はこのようなテーブルを持っています

id | userId | point | type
1     3        3       1
2     3        5       1 
3     3        6       1
4     3        2       2
5     4        5       1

欲しいのは

userId | totalPoint
  3         28
  4         5

私が計算する方法は、タイプが1のすべてのポイントを合計し、この合計にタイプが2のポイントを乗算することです

例:(3 + 5 + 6)* 2 = 28

多くのクエリを試しましたが、取得できませんでした

どんな助けでも大歓迎です

回答 3 件
  • これは、最初に思われるよりも少し複雑です。条件付き集計が必要であり、 "2"値が欠落していることに注意する必要があります。

    select userid,
           (sum(case when type = 1 then point else 0 end) *
            coalesce(sum(case when type = 2 then point end), 1)
           )
    from t
    group by userid;
    
    

  • 製品の集計を作成するには、次の数学トリックを使用します。

    SELECT
           userid, 
           exp(SUM(LOG(ABS(NULLIF(field, 0)))))  
        FROM
           (select distinct userid, type, sum(point) over(partition by userid, type order by userid)field  from #temp 
    group by userid, type, point)a
        GROUP BY
           userid
    
    

  • ここでSELECT、サブクエリ、グループのみを使用してみてください

    SELECT USER_ID,
         (SELECT SUM(POINT) FROM THETABLE b 
            WHERE a.USER_ID = b.USER_ID AND TYPE = 1
            GROUP BY b.USER_ID, TYPE)
                 *
         (SELECT SUM(POINT) FROM THETABLE c
            WHERE a.USER_ID = c.USER_ID AND TYPE = 2
            GROUP BY b.USER_ID, TYPE)
         AS TOTAL_POINT
     FROM THETABLE a
    
    

あなたの答え