带有COUNT或SUM问题的SQL CASE

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

它关于以下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。

我希望这对您有意义。提前致谢。

上一个

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

使用子查询,或重复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`

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章