Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GROUP BY in UPDATE FROM clause

I really need do something like that:

UPDATE table t1  SET column1=t2.column1  FROM table t2  INNER JOIN table t3  USING (column2)  GROUP BY t1.column2; 

But postgres is saying that I have syntax error about GROUP BY clause. What is a different way to do this?

like image 952
sennin Avatar asked Mar 11 '11 11:03

sennin


People also ask

Can we use GROUP BY clause in UPDATE statement?

All replies. You can't issue an UPDATE statement using a group by. The point of using GROUP BY is to change the way that the result set is displayed to the user. When you have a GROUP BY statement you utilize the HAVING clause to filer the aggregated result set.

Does GROUP BY go after WHERE clause?

GROUP BY Clause is utilized with the SELECT statement. GROUP BY aggregates the results on the basis of selected column: COUNT, MAX, MIN, SUM, AVG, etc. GROUP BY returns only one result per group of data. GROUP BY Clause always follows the WHERE Clause.


1 Answers

The UPDATE statement does not support GROUP BY, see the documentation. If you're trying to update t1 with the corresponding row from t2, you'd want to use the WHERE clause something like this:

UPDATE table t1 SET column1=t2.column1 FROM   table t2 JOIN   table t3 USING (column2) WHERE  t1.column2=t2.column2; 

If you need to group the rows from t2/t3 before assigning to t1, you'd need to use a subquery something like this:

UPDATE table t1 SET column1=sq.column1 FROM  (    SELECT t2.column1, column2    FROM   table t2    JOIN   table t3 USING (column2)    GROUP  BY column2    ) AS sq WHERE  t1.column2=sq.column2; 

Although as formulated that won't work because t2.column1 isn't included in the GROUP BY statement (it would have to be an aggregate function rather than a simple column reference).

Otherwise, what exactly are you trying to do here?

like image 99
Anomie Avatar answered Sep 22 '22 08:09

Anomie