SQL 有 COUNT 或 SUM 问题的案例

SQL CASE with COUNT or SUM issue

我已经尝试了一些选项,但它根本不起作用或不符合我的需要。

关于以下 SQL(这不起作用,但最接近我需要的):

SELECT CASE WHEN r.`content` LIKE '% word1 %' 
            then 1 
            else 0 
      END AS `val1`
    , CASE WHEN r.`content` LIKE '% word2 %' 
           then 1 
           else 0 
      END AS `val2`
    , CASE WHEN r.`city` LIKE 'cityname' 
           then 1 
           else 0 
      END AS `val3`
    , (`val1`+`val2`+`val3`) AS `reference_value` 
FROM `testimonials` as r 
WHERE `accepted`='1' 
ORDER BY `reference_value`

所以基本上得分最多的条目排在最前面。当 3 个案例匹配时 reference_value 将获得 3 分。 该代码是动态的,因此它也可以是 4、5、6、7 或更多 CASE。

我希望这对您有所帮助。 提前致谢。

SELECT *,val1+val2+val3 AS `reference_value` FROM (
    CASE WHEN r.content LIKE '% word1 %' 
        then 1 
        else 0 
    END AS `val1`
   ,CASE WHEN r.content LIKE '% word2 %' 
       then 1 
       else 0 
   END AS `val2`
  ,CASE WHEN r.city LIKE 'cityname' 
       then 1 
       else 0 
  END AS `val3`
  ,  
  FROM `testimonials` as r 
  WHERE `accepted`='1' 
)
ORDER BY `reference_value`

您不能在同一个 SELECT 列表中重复使用计算值(如查询中的 val1)。

使用子查询,或重复 CASE 来求和它们的值。在这种情况下我的偏好是子查询,但实际需求和实际执行计划(解释)可以随时覆盖它。

SELECT
  val1,val2,val3,
  val1+val2+val3 as reference_value
FROM (
  SELECT CASE WHEN r.`content` LIKE '% word1 %' 
            then 1 
            else 0 
      END AS `val1`
    , CASE WHEN r.`content` LIKE '% word2 %' 
           then 1 
           else 0 
      END AS `val2`
    , CASE WHEN r.`city` LIKE 'cityname' 
           then 1 
           else 0 
      END AS `val3`
  FROM `testimonials` as r 
  WHERE `accepted`='1' 
) TMP
ORDER BY `reference_value`