mysql sum去重求和

select t.id,
               t.title,
               t.entry_form_id,
               GREATEST(MAX(t.gmt_create), MAX(t.gmt_modified))            AS shareReadTime,
               COALESCE(SUM(IF(t.rowNum = 1, t.share_num, 0)), 0)          AS shareNum,
               count(DISTINCT t.user_id)                                   as readNum,
               count(DISTINCT if(t.nickname is not null, t.user_id, null)) as clueNum,
               COALESCE(SUM(IF(t.rowNum2 = 1, t.view_num, 0)), 0)          AS sumViewNum
        from (select t1.id,
                     t1.title,
                     t1.entry_form_id,
                     t2.gmt_create,
                     t3.gmt_modified,
                     t3.share_num,
                     ROW_NUMBER() OVER (PARTITION BY t3.`staff_id`,t3.`article_id` ORDER BY t3.id )                       as rowNum,
                     t2.view_num,
                     t2.user_id,
                     ROW_NUMBER() OVER (PARTITION BY t2.`user_id`,t2.`staff_id`,t2.`article_id`,t2.`day` ORDER BY t2.id ) as rowNum2,
                     t4.nickname
              from article t1
                       left join user_article_view_log t2
                                 on t1.id = t2.article_id
                       left join staff_share_log t3
                                 on t1.id = t3.article_id
                       left join user_info t4
                                 on t2.user_id = t4.id
              where t3.staff_id = #{staffId}) t
        GROUP BY t.id

 

posted @ 2024-08-26 16:58  怕黑,可是却恋上了夜  阅读(3)  评论(0编辑  收藏  举报