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`
我已经尝试了一些选项,但它根本不起作用或不符合我的需要。
关于以下 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`