Hi,

On 10/09/2018 03:10 PM, Arun Kumar wrote:
Hi,
From MySQL 5.7, It supports SQL standard 99 and implements the feature such functional dependent on the GROUP By columns, i.e., it detects the non-aggregate columns which are functionally dependent on the GROUP BY columns (not included in GROUP BY) and then executes the query without error.
For example,

*SELECT a.sno,b.sno,a.name,b.location FROM Name AS a JOIN Location AS b ON a.sno=b.sno GROUP BY a.sno,b.location *

In this case, a.sno is a primary key so no need to include a.name in GROUP By as it would be identified by the primary key and then for b.sno which is again equated with a.sno (primary key) so no need to add this as well but for b.location, we need to add it in GROUP BY or we should use any aggregate function over this column to avoid error. For more info, please check on the below link https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
Is there any plans on supporting this in Postgres in future versions ?


So, which part of this supposedly does not work in PostgreSQL?

Consider this:

test2=# create table t (id int primary key, b int, c int, d int);
CREATE TABLE
test2=# explain select * from t group by id, b, c;
                         QUERY PLAN
------------------------------------------------------------
 HashAggregate  (cost=33.12..51.62 rows=1850 width=16)
   Group Key: id
   ->  Seq Scan on t  (cost=0.00..28.50 rows=1850 width=16)
(3 rows)

test2=# explain select id, count(*) from t group by id, b, c;
                         QUERY PLAN
------------------------------------------------------------
 HashAggregate  (cost=37.75..56.25 rows=1850 width=20)
   Group Key: id
   ->  Seq Scan on t  (cost=0.00..28.50 rows=1850 width=12)
(3 rows)

So clearly we've already eliminated the functionally-dependent columns from the aggregation.

regards

--
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Reply via email to