表格是
id col1 col2
1 former good
2 future fair
3 now bad
4 former good
.............
目标:我只需要选择那些累积分数高于0.8的行
1)如果col1 ='前'那么该行获得0.2分,如果'现在'那么'0.7',如果'未来'那么0.3
2)如果col2 ='good'那么该行得0.8分,如果'坏'那么'0.1',如果'公平'那么0.5
因此我需要在WHERE子句中指定数值。我想避免在SELECT中更改值,因为我需要用户能够看到标签('good','now'等)而不是数字。
我该怎么做?
SELECT *
FROM mytable
WHERE ?
答案 0 :(得分:7)
使用CASE根据您的逻辑分配权重:
WHERE
CASE col1
WHEN 'former' THEN 0.2
WHEN 'now' THEN 0.7
WHEN 'future' THEN 0.3
ELSE 0
END +
CASE col2
WHEN 'good' THEN 0.8
WHEN 'bad' THEN 0.1
WHEN 'fair' THEN 0.5
ELSE 0
END > 0.8
答案 1 :(得分:1)
SELECT * FROM myTable where col1 + col2 > 0.8
但为我们提供表格的真实结构。