我有这样一张桌子(简化版)

id pos neu neg
x 1 2 3
y 4 2 1
z 1 5 2

我使用的是PostgreSQL,我的目标是为每一行获得最大值,所以我使用Next Query:

SELECT id, GREATEST(pos, neg, neu) FROM my_table;

对此,我毫不犹豫地说:

id greatest
x 3
y 4
z 5

但是有没有办法让我知道这些值属于哪一列呢?

预期的SMTH类型:

id greatest column
x 3 neg
y 4 pos
z 5 neu

推荐答案

您可以使用如下的CASE表达式:

select id, greatest(pos, neg, neu),
  case greatest(pos, neg, neu) 
    when pos then 'pos' 
    when neg then 'neg' 
    when neu then 'neu' 
  end as ColumnName
from t;

Sql相关问答推荐

Oracle SQL对列进行汇总并在列表底部显示总计

不可能在SQL MERGE子句中引发异常

部分匹配表中元素的MariaDB查询查找结果

没有循环的SQL更新多个XML node 值

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

如何更新SQLite数据库中的表?

如何在PostgreSQL中的一列中添加两个文本?

不同表达方式时的大小写

Select 列组(按同一表格中的另一列分组)Laravel 10

同一表的Oracle SQL更新(含YTD合计)

使用递归CTE在BigQuery中获取文件路径

在 Postgres 中将结果按几十年划分

删除行而不使数据库超载

GRAFANA 数据库查询错误:pq:列名称不存在

基于变量的条件 WHERE 子句

一次 Select 语句中按组累计的SQL累计数

字符串从更改到表列和查询中的一行的转换错误

PostgresQL-根据另一列找到 3 个最低值

有没有一种方法可以将始终遵循序列的单个字段的值组合起来,以创建每个 ID 的所有移动?

SQL 计数和过滤查询优化