首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PostgreSQL:条件基于两列的情况

PostgreSQL:条件基于两列的情况
EN

Stack Overflow用户
提问于 2022-04-25 16:22:03
回答 1查看 57关注 0票数 0

想象一下虚拟数据

代码语言:javascript
运行
复制
id   name     category    score   
1    Alex     A           11        
2    Alex     D           4      
3    Bill     A           81     
4    Bill     B           34       
5    Bill     D           2       
6    Carl     C           5       
7    Carl     D           10       

我想运用这一行动:

代码语言:javascript
运行
复制
if score of A, B, or C > score of D
then 'Review'
else 'Pass'

所以输出是:

代码语言:javascript
运行
复制
id   name     category    score   conclusion
1    Alex     A           11       Review
2    Alex     D           4        Review
3    Bill     A           81       Review
4    Bill     B           34       Review
5    Bill     D           2        Review
6    Carl     C           5        Pass
7    Carl     D           10       Pass

如何在PostgreSQL中获得此信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-25 16:33:36

您需要具有窗口函数的条件聚合:

代码语言:javascript
运行
复制
select
  id, name, category, score,
  case when 
         max(score) filter (where category in ('A', 'B', 'C')) over (partition by name) >
         min(score) filter (where category = 'D')              over (partition by name)
       then 'Review'
       else 'Pass'
  end as result
from mytable
order by name, id;

如果名称没有A、B或C,名称没有D,则结果将是“Pass”。如果你想要的不一样,那么你必须调整摄像机。

上面的查询为每个人在其所有行中显示一个状态。如果您希望每一行的状态不同,只需与该行的得分进行比较:

代码语言:javascript
运行
复制
select
  id, name, category, score,
  case 
    when category = 'D' then null
    when score > min(score) filter (where category = 'D') over (partition by name) then 'Review'
    else 'Pass'
  end as result
from mytable
order by name, id;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72002699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档