假设我在PostgreSQL
(版本11)数据库中有这样的表:
| ID | PERSONAL_PERCENT | GLOBAL_PERCENT |
|----|------------------|----------------|
| 1 | 50,6544401544 | 52,5519848771 |
| 1 | 25,0000 | 52,5519848771 |
| 1 | 61,9117647059 | 52,5519848771 |
我正在尝试编写SQL查询,该查询将返回带有新列的结果集。在我的情况下,该列称为COLOR
。该列的值取决于列的值为PERSONAL_PERCENT
和GLOBAL_PERCENT
。
1)如果PERSONAL_PERCENT
比GLOBAL_PERCENT
大5%,则必须为绿色。例如,61,9117647059
列的PERSONAL_PERCENT
值比52,5519848771
列的GLOBAL_PERCENT
值高5%。因此,COLOR列具有GREEN值。
2)如果PERSONAL_PERCENT
比GLOBAL_PERCENT
小5%,则必须为红色。例如,25,0000
列的PERSONAL_PERCENT
值比52,5519848771
列的GLOBAL_PERCENT
值低5%。因此,COLOR列具有RED值。
3)如果PERSONAL_PERCENT
小于GLOBAL_PERCENT
并且相差1%至5%,则必须为黄色。例如,50,6544401544
列的PERSONAL_PERCENT
值比52,5519848771
列的GLOBAL_PERCENT
值少不超过5%。因此,COLOR列具有YELLOW值。
我想要这样的最终结果并添加新列:
| ID | PERSONAL_PERCENT | GLOBAL_PERCENT | COLOR |
|----|------------------|----------------|--------|
| 1 | 50,6544401544 | 52,5519848771 | YELLOW |
| 1 | 25,0000 | 52,5519848771 | RED |
| 1 | 61,9117647059 | 52,5519848771 | GREEN |
答案 0 :(得分:1)
这是一个case
表达式:
select t.*,
(case when personal_percent < global_percent * 0.95 then 'RED'
when personal_percent > global_percent * 0.95 then 'GREEN'
else 'YELLOW'
end) as color
from t;