代码之家  ›  专栏  ›  技术社区  ›  Nurzhan Nogerbek

如何确定两列值之间的差异?

  •  0
  • Nurzhan Nogerbek  · 技术社区  · 6 年前

    假设我有这样的桌子 PostgreSQL

    | 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) 如果 个人百分比 大于 百分之五必须是绿色。例如 61,9117647059 价值 个人百分比 列比 52,5519848771 价值 全球百分比 列。这就是为什么颜色列有绿色值。

    2) 如果 个人百分比 小于 全球百分比 25,0000 价值 列比 525519848771 全球百分比 列。这就是为什么颜色列有红色值。

    个人百分比 小于 1%和5%之间的差别一定是黄色的。例如 50,6544401544 价值 个人百分比 列不超过5% 525519848771 价值 全球百分比

    我想要新专栏的最终结果:

    | ID | PERSONAL_PERCENT | GLOBAL_PERCENT | COLOR  |
    |----|------------------|----------------|--------|
    | 1  | 50,6544401544    | 52,5519848771  | YELLOW |
    | 1  | 25,0000          | 52,5519848771  | RED    |
    | 1  | 61,9117647059    | 52,5519848771  | GREEN  |
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    这是一个 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;