在SQL中按用户对列值进行分类

时间:2015-05-21 19:15:56

标签: sql oracle

假设我有一张如下表:

Scores
-----------------
User varchar(100)
Score int

表格中的数据如下:

'Jay' | 80
'Jay' | 90
'Jay' | 95
'Jay' | 73
'Max' | 95
'Max' | 80
'Max' | 75

我需要一个选择表的每一行的查询,然后按用户进行分数比较。如果得分是唯一得分或最高得分,则将其归类为“高”。如果用户具有多个分数并且该特定分数实例是最低分数,则将其归类为“低”。每个其他分数被归类为“meh”。查询会是什么样的?我希望输出看起来像这样:

'Jay' | 80 | 'Meh'
'Jay' | 90 | 'Meh'
'Jay' | 95 | 'High'
'Jay' | 73 | 'Low'
'Max' | 95 | 'High'
'Max' | 80 | 'Meh'
'Max' | 75 | 'Low'

1 个答案:

答案 0 :(得分:3)

您需要一个窗口聚合函数,一个MIN / MAX组:

case
   when score = max(score) 
                over (partition by user) 
   then 'High' 
   when score = min(score) 
                over (partition by user) 
   then 'Low' 
   else 'Meh'
end