考虑一个简单的表,如下所示:
CREATE TABLE example_groups(
id SERIAL PRIMARY KEY,
value1 INT NOT NULL,
value2 INT NOT NULL,
user_name TEXT NOT NULL
);里面有几行:
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列按表分组的查询:
SELECT SUM(value1), SUM(value2), MAX(value2)
FROM example_groups
GROUP BY user_name;结果返回什么,我将把它插入到另一个表中(查询是INSERT SELECT)。
我想将MAX列中所有行的最大值返回到我的代码中。到目前为止,我一直在使用RETURNING语句,但是当我尝试在这里使用它时,会出现一个错误。
在这个场景中使用RETURNING语句的正确方法是什么?
失败查询的示例:
SELECT SUM(value1), SUM(value2), MAX(value2) AS max2
FROM example_groups
RETURNING (MAX(max2))
GROUP BY user_name;Ps我正在使用postgres。
发布于 2014-07-25 11:20:05
也试试这个
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)或
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发布于 2014-07-25 09:17:15
我不太熟悉Postgres语法,但是根据文档,返回语句似乎会返回/计算每一行插入的值,因此在这种情况下使用聚合函数(MAX)没有任何意义。
也许有更优雅的方法来编写查询,但这应该足够了(假设我没有犯语法错误):
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用户将能够纠正我以上的问题。
https://stackoverflow.com/questions/24951317
复制相似问题