添加标记列的最大值和最小值的列

Posted

技术标签:

【中文标题】添加标记列的最大值和最小值的列【英文标题】:Add a columns who tags the max and min value of a column 【发布时间】:2021-03-08 16:42:07 【问题描述】:

我想添加一个额外的列,其中将显示每个组 (ID) 的最小值和最大值。 表格如下所示:

从 mytable 中选择 ID、VALUE

ID VALUE
1 4
1 1
1 7
2 2
2 5
3 7
3 3

这是我想要得到的结果:

ID VALUE min_max_values
1 4 NULL
1 1 min
1 7 max
2 2 min
2 5 max
3 7 max
3 3 min
4 1 both
5 2 min
5 3 max

提前感谢您的帮助!

【问题讨论】:

请向我们展示您的尝试。 【参考方案1】:

您可以使用窗口函数和case 表达式:

select id, value,
    case
        when value = min_value and min_value = max_value then 'both'
        when value = min_value then 'min'
        when value = max_value then 'max'
    end as min_max_values
from (
    select t.*,
        min(value) over(partition by id) as min_value,
        max(value) over(partition by id) as max_value
    from mytable t
) t

子查询不是绝对必要的,我们可以直接在外部查询中使用窗口min()max()。它只是为了避免在外部查询中重复输入窗口函数表达式。

【讨论】:

非常感谢!

以上是关于添加标记列的最大值和最小值的列的主要内容,如果未能解决你的问题,请参考以下文章

仅当高于 0 时才计算每列的最小值和最大值之间的差异

sql查询时间最小值的列

Pandas - 具有重复值的列的外部连接

sql 查询一行内几列的平均值,最大值,最小值,怎么写

显示不包括最小值和最大值的列数

MySQL的聚合函数