如何在SQL查询中使用条件

时间:2016-08-09 01:04:25

标签: sql case having

SELECT 
    userid,
    CASE 
       WHEN (COUNT(CASE  
                      WHEN onlinesportsgamewagers != 0
                         THEN 1
                         ELSE null
                   END)  
             + COUNT(CASE 
                        WHEN depositmade_amt != 0
                           THEN 1
                           ELSE null
                     END)) >= 10  
            THEN "VIP"
            ELSE "NON-VIP"
    END as VIPcheck             
FROM 
    player_activity
WHERE 
    userid = 2023410 
GROUP BY 
    year(txndate), month(txndate)

此查询确定用户每个月的VIP状态。

最终,我想要一个查询来确定用户是否达到了至少3个月(包括当前月份)的VIP状态。目前,它只是用户2023410,但最终我想为整个数据库运行它。

因此我的最终输出是:

用户 - VIPcheck(3个不同月份/活动状态)

(每个用户ID一行)

HAVING COUNT(CASE WHEN (COUNT(CASE WHEN onlinesportsgamewagers != 0
            THEN 1
                ELSE null
            END)  
                + COUNT(CASE WHEN depositmade_amt != 0
                        THEN 1
                            ELSE null
                        END)) >= 10  
            THEN 1
                ELSE 0
                END) 

尝试了上述声明,但它没有奏效。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,这将按月获得一个用户的VIP状态:

SELECT userid, year(txndate), month(txndate),                                                                                         
       (CASE WHEN SUM(CASE WHEN onlinesportsgamewagers <> 0 THEN 1 ELSE 0 END) +
                  SUM(CASE WHEN depositmade_amt <> 0 THEN 1 ELSE 0 END) >= 10
             THEN 'VIP'
             ELSE 'NON-VIP'
        END) as VIPcheck             
FROM player_activity
GROUP BY userid, year(txndate), month(txndate);

另一个聚合将获得你想要的东西:

SELECT userid,
       (CASE WHEN SUM(VIPcheck = 'VIP') >= 3 THEN 'SUPER-VIP'
             WHEN SUM(VIPcheck = 'VIP') >= 1 THEN 'VIP'
             ELSE 'HOI POLLOI'
        END) as status
FROM (SELECT userid, year(txndate), month(txndate),                                                                                         
             (CASE WHEN SUM(CASE WHEN onlinesportsgamewagers <> 0 THEN 1 ELSE 0 END) +
                        SUM(CASE WHEN depositmade_amt <> 0 THEN 1 ELSE 0 END) >= 10
                   THEN 'VIP'
                   ELSE 'NON-VIP'
              END) as VIPcheck             
      FROM player_activity
      GROUP BY userid, year(txndate), month(txndate)
     ) uym
GROUP BY userid;