表是
id col1 col2
1 former good
2 future fair
3 now bad
4 former good
.............
Run Code Online (Sandbox Code Playgroud)
目标:我只需要选择那些累积分数高于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 ?
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)