Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当一行有一个最大值时,则获取一个字符串值";是的;?_Sql_Group By_Max_Greatest N Per Group_Window Functions - Fatal编程技术网

Sql 当一行有一个最大值时,则获取一个字符串值";是的;?

Sql 当一行有一个最大值时,则获取一个字符串值";是的;?,sql,group-by,max,greatest-n-per-group,window-functions,Sql,Group By,Max,Greatest N Per Group,Window Functions,我认为这应该是一个快速的方法,但如何识别表的最大值并给它一个字符串标签“Yes” 我知道在这方面有一个案例陈述,但只是需要一些指导 范例 ID Amount Max 110 1000 111 1000 112 2000 Yes 113 1000 您可以使用窗口功能: select t.*, case when amount = max(amount) over () then 'Yes' end from

我认为这应该是一个快速的方法,但如何识别表的最大值并给它一个字符串标签“Yes”

我知道在这方面有一个案例陈述,但只是需要一些指导

范例

ID      Amount   Max
110      1000     
111      1000
112      2000    Yes
113      1000

您可以使用窗口功能:

select 
    t.*,
    case when amount = max(amount) over () then 'Yes' end
from mytable t
一些RDBMS不喜欢空的
over()
子句,在这种情况下,您可以使用
rank()

select 
    t.*,
    case when rank() over(order by amount desc) = 1 then 'Yes' end
from mytable t

id | amount | case --: | -----: | :--- 110 | 1000 | null 111 | 1000 | null 112 | 2000 | Yes 113 | 1000 | null id |金额|案例 --: | -----: | :--- 110 | 1000 |零 111 | 1000 |零 112 | 2000 |是 113 | 1000 |零
如果DBMS不支持窗口函数,则可以使用子查询:

select t.*, 
      (case when t.amount = (select max(t1.amount) from table t1) then 'Yes' else '' end) as Max
from table t;

如果您想改为
null
,可以在case中删除
else
子句

请用您正在使用的数据库标记您的问题:oracle、mysql、sql server。。。?