使用 MAX 创建列
Create Column with MAX
我有一个问题,我觉得一个简单的 SQL 查询就可以解决它。
我有一个 table 包含以下示例中的数据,我需要“输出”列。
PID 列有重复项,我不想打扰该列。
我需要的是根据PID计算P_Second
- 如果 P_Seconds 值对于一个 PID 是唯一的,我只需要在 'Output' 列中输入一个条目。
- 如果它不是唯一的,那么我需要 'Output' 列中的最大秒数。
- 如果PID是
Null
,我只需要Null
.
SELECT PID, MAX(P_SECONDS) OUTPUT
from table
GROUP BY PID
如果都一样,那么MAX也一样。如果它们不同,则选择MAX。
您似乎希望每个 p_id
填充一次输出列,并且 p_seconds
首先达到其最大值。 “第一个”由 pry
列确定。
这是一个带有条件逻辑的window函数:
select t.*,
(case when row_number() over (partition by p_id order by p_seconds desc, pry asc) = 1
then p_seconds
end) as output
from t;
我有一个问题,我觉得一个简单的 SQL 查询就可以解决它。 我有一个 table 包含以下示例中的数据,我需要“输出”列。
PID 列有重复项,我不想打扰该列。
我需要的是根据PID计算P_Second
- 如果 P_Seconds 值对于一个 PID 是唯一的,我只需要在 'Output' 列中输入一个条目。
- 如果它不是唯一的,那么我需要 'Output' 列中的最大秒数。
- 如果PID是
Null
,我只需要Null
.
SELECT PID, MAX(P_SECONDS) OUTPUT
from table
GROUP BY PID
如果都一样,那么MAX也一样。如果它们不同,则选择MAX。
您似乎希望每个 p_id
填充一次输出列,并且 p_seconds
首先达到其最大值。 “第一个”由 pry
列确定。
这是一个带有条件逻辑的window函数:
select t.*,
(case when row_number() over (partition by p_id order by p_seconds desc, pry asc) = 1
then p_seconds
end) as output
from t;