首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回所有组的最大值?

返回所有组的最大值?
EN

Stack Overflow用户
提问于 2014-07-25 08:28:55
回答 2查看 52关注 0票数 0

考虑一个简单的表,如下所示:

代码语言:javascript
运行
复制
CREATE TABLE example_groups(
                            id SERIAL PRIMARY KEY,
                            value1 INT NOT NULL,
                            value2 INT NOT NULL,
                            user_name TEXT NOT NULL
                          );

里面有几行:

代码语言:javascript
运行
复制
INSERT INTO example_groups(value1, value2, user_name) VALUES(3, 1, 'Tom');
INSERT INTO example_groups(value1, value2, user_name) VALUES(5, 2, 'Tom');
INSERT INTO example_groups(value1, value2, user_name) VALUES(1, 3, 'Tom');
INSERT INTO example_groups(value1, value2, user_name) VALUES(40, 10, 'John');
INSERT INTO example_groups(value1, value2, user_name) VALUES(1, 11, 'John');

我有以下按user_name列按表分组的查询:

代码语言:javascript
运行
复制
SELECT SUM(value1), SUM(value2),  MAX(value2)
FROM example_groups
GROUP BY user_name;

结果返回什么,我将把它插入到另一个表中(查询是INSERT SELECT)。

我想将MAX列中所有行的最大值返回到我的代码中。到目前为止,我一直在使用RETURNING语句,但是当我尝试在这里使用它时,会出现一个错误。

在这个场景中使用RETURNING语句的正确方法是什么?

失败查询的示例:

代码语言:javascript
运行
复制
SELECT SUM(value1), SUM(value2), MAX(value2) AS max2
FROM example_groups
RETURNING (MAX(max2))
GROUP BY user_name;

Ps我正在使用postgres。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-25 11:20:05

也试试这个

代码语言:javascript
运行
复制
with cte as
(
SELECT SUM(value1) as sum1, SUM(value2) as sum1 ,  MAX(value2) as maxValue2
FROM example_groups
GROUP BY user_name
)
select * from cte where maxvalue2 = (select max(maxValue2) from cte)

代码语言:javascript
运行
复制
with cte as
(
SELECT SUM(value1) as sum1, SUM(value2) as sum1 ,  MAX(value2) as maxValue2
FROM example_groups
GROUP BY user_name
)
select max(maxValue2) as max_Of_all from cte
  • The Best Postgres Feature You're Not Using
  • PostgreSQL - WITH Clause
票数 0
EN

Stack Overflow用户

发布于 2014-07-25 09:17:15

我不太熟悉Postgres语法,但是根据文档,返回语句似乎会返回/计算每一行插入的值,因此在这种情况下使用聚合函数(MAX)没有任何意义。

也许有更优雅的方法来编写查询,但这应该足够了(假设我没有犯语法错误):

代码语言:javascript
运行
复制
SELECT SUM(value1), SUM(value2), MAX(value2) AS max_all_groups
FROM example_groups
GROUP BY user_name
ORDER BY max_all_groups DESC -- order from highest to lowest maximum value per user
LIMIT 1 -- get top row

显然,如果您只是想要在为INSERT语句返回的所有组中获得最大值,而不关心SUM(.)可以移除它们的列。

我希望这有助于,毫无疑问,更有经验的Postgres用户将能够纠正我以上的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24951317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档