2015-09-15 32 views
0

我試過了一些選項,但它根本不起作用或不符合我的需要。帶CAST或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。

我希望這對你有任何意義。 在此先感謝。

+1

總是提供一些數據集和預期結果。不管你用「文字」來解釋它有多清楚。有這個:...想要這個:...將以最快的方式正確回答 – M0rtiis

回答

3

您不能重複在同一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` 
+0

感謝您的快速回復!我仍然得到錯誤:#1054 - '字段列表'中的未知列'val1' – Rob

+0

是的,我忘記刪除原來的總和線。固定 – Pred

0
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`