Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Postgresql RE:列名称为的最大值_Postgresql - Fatal编程技术网

Postgresql RE:列名称为的最大值

Postgresql RE:列名称为的最大值,postgresql,Postgresql,我正在阅读上面链接的问题和公认的答案,这些答案似乎是正确的,关于这个答案我有几个问题 很抱歉,我必须创建一个新的帖子,没有足够高的声誉来评论旧帖子,因为它看起来很旧 问题 我的第一个问题是@var_max_val:=的意义是什么?我在没有它的情况下重新运行了查询,一切正常 我的第二个问题是,有人能解释一下这是如何达到预期效果的: CASE @var_max_val WHEN col1 THEN 'col1' WHEN col2 THEN 'col2'

我正在阅读上面链接的问题和公认的答案,这些答案似乎是正确的,关于这个答案我有几个问题

很抱歉,我必须创建一个新的帖子,没有足够高的声誉来评论旧帖子,因为它看起来很旧

问题 我的第一个问题是@var_max_val:=的意义是什么?我在没有它的情况下重新运行了查询,一切正常

我的第二个问题是,有人能解释一下这是如何达到预期效果的:

 CASE @var_max_val WHEN col1 THEN 'col1'
                     WHEN col2 THEN 'col2'
                     ...
   END AS max_value_column_name
我的第三个问题如下:

似乎在这个case语句中,当x然后y为表中的每一列时,他必须手动编写一行代码。如果您有1-5列,这是很好的。但是如果你有10000呢?你会怎么做

附言:我可能在这篇文章中违反了一些论坛规则,如果我违反了,一定要让我知道。
谢谢你的阅读,谢谢你的时间

链接的问题是关于mysql的,因此它不适用于postgresql,例如@var_max_val语法是mysql特有的。要在postgresql中实现同样的功能,可以使用横向子查询。例如,假设您有以下表格和示例数据:

CREATE TABLE t(col1 int, col2 int, col3 int);
INSERT INTO t VALUES (1,2,3), (5,8,6);
然后,您可以通过以下查询确定每行的最大列:

SELECT *
FROM t, LATERAL (
            VALUES ('col1',col1),('col2',col2),('col3',col3)
            ORDER BY 2 DESC
            LIMIT 1
        ) l(maxcolname, maxcolval);
将生成以下输出:

 col1 | col2 | col3 | maxcolname | maxcolval 
------+------+------+------------+-----------
    1 |    2 |    3 | col3       |         3
    5 |    8 |    6 | col2       |         8
我认为这个解决方案比mysql链接文章中介绍的要优雅得多


至于必须手动编写代码,不幸的是,我不认为您可以避免这种情况。

在Postgres 9.5中,您可以使用来获取列名。在这种情况下,您不必手动写入所有列的名称。该解决方案需要一个主键或一个唯一的列才能正确执行 分组:

create table a_table(id serial primary key, col1 int, col2 int, col3 int);
insert into a_table (col1, col2, col3) values (1,2,3), (5,8,6);

select distinct on(id) id, key, value
from a_table t, jsonb_each(to_jsonb(t))
where key <> 'id'
order by id, value desc;

 id | key  | value 
----+------+-------
  1 | col3 | 3
  2 | col2 | 8
(2 rows)

只是一个简短的提示,这个“选择最伟大的col1,col2,col3。。。作为最大_值,当col1然后是“col1”,当col2然后是“col2”。。。结束为max_value_column_name FROM table_name WHERE…`在Postgres中工作postgresql中确实存在最大的函数,但链接的文章也使用特定于mysql的用户定义变量。获取错误:函数到_jsonba_table不存在SQL状态:42883@Paarthjsonb是在9.5中添加的,您使用的是该版本吗?