0

我有一个这样的 SQL 查询:

SELECT sum(CASE
             WHEN user_ad_type = '2' THEN
               10
             WHEN user_ad_type = '3' THEN
               15
             WHEN user_ad_telegram != '' OR user_ad_telegram IS NOT NULL THEN
               3
             WHEN user_ad_website != '' OR user_ad_website IS NOT NULL THEN
               3
             ELSE
               0
           END) sum
       FROM ads
       WHERE user_id = 57

但它没有正确计算所有项目的总和。看看我的桌子: 点击这里打开 img

所以所有项目的总和应该是21,但是如果你看一下这个 img,你会看到它是15。因为user_ad_type + user_ad_telegram + user_ad_website不为空或有特殊值,并且此项的总和为 21。有什么问题?

我什至测试了这个:

SELECT sum(CASE
             WHEN user_ad_type = '2' THEN
               10
             WHEN user_ad_type = '3' THEN
               15
             WHEN user_ad_telegram IS NOT NULL THEN
               3
             WHEN user_ad_website IS NOT NULL THEN
               3
             ELSE
               0
           END) sum
       FROM ads
       WHERE user_id = 57

但它仍然没有计算所有项目。

我想检查是否某些列不为空或具有特殊值,然后将价格添加到它们并获取该项目的总价

4

1 回答 1

0

我认为您需要单独的总和:

SELECT (SUM(CASE WHEN user_ad_type = '2' THEN 10
                 WHEN user_ad_type = '3'
                 THEN 15
            END) +
        SUM(CASE WHEN user_ad_telegram <> '' THEN 3 ELSE 0 END) + -- handles NULL as well
        SUM(CASE WHEN user_ad_website <> '' THEN 3 ELSE 0 END)
       ) as sum
FROM ads
WHERE user_id = 57;
于 2020-02-12T15:19:07.270 回答