列中所有值到新列的最大值

Posted

技术标签:

【中文标题】列中所有值到新列的最大值【英文标题】:Max value from all values in column to new column 【发布时间】:2019-02-07 14:04:38 【问题描述】:

我需要在包含所有记录的最大年份(存储为文本)的 select 语句中添加新列,然后将其标记为 CY/PY。只有两年总是在表格中。

 year    value   
 2019    value1  
 2019    value2  
 2018    value3  

到目前为止,我尝试了这个,但它只返回该行的最大值,而不是整个列。

 select year, value, IIF(year=MAX(year), 'CY', 'PY') AS "CY/PY" from table

预期:

year    value     CY/PY
2019    value1    CY
2019    value2    CY
2018    value3    PY

【问题讨论】:

您需要从子查询中获取最大年份。 【参考方案1】:

我想你想要一个窗口函数:

select year, value,
       (case when year = MAX(year) over () then 'CY' else 'PY' end) AS "CY/PY"
from table

【讨论】:

【参考方案2】:

尝试使用MAX 作为解析函数:

WITH cte AS (
    SELECT year, value, MAX(year) OVER () AS max_year
    FROM yourTable
)

SELECT
    year,
    value,
    IIF(year = max_year, 'CY', 'PY') AS "CY/PY"
FROM cte;

【讨论】:

【参考方案3】:

尝试在您的 IIF 中使用子查询:

select year, value, IIF(year=(select MAX(year) from table), 'CY', 'PY') AS "CY/PY" from table

【讨论】:

这实际上看起来不错,但我得到了错误。 “错误:函数'IIF(BOOL,UNKNOWN,UNKNOWN)'不存在无法识别满足给定参数类型的函数您可能需要添加显式类型转换”调试似乎有点重。 尝试将 IIF 替换为: case when year=(select MAX(year) from table) then 'CY' else 'PY' end

以上是关于列中所有值到新列的最大值的主要内容,如果未能解决你的问题,请参考以下文章

比较两列:如果匹配,则在新列中打印值,如果不匹配,则将第二列的值打印到新列

如何通过读取shell脚本中的csv文件来将2列的总和添加到新列中

熊猫(python):列中的最大值在新列中定义新值

迭代具有固定行的列

在Pandas Dataframe列中查找某些单词,如果找到,则将它们添加到新列中

检查一列中的值是不是存在于另一列中,如果存在,则将另一列中的值复制到新列中