Select multiple (non-aggregate function) columns with GROUP BY

后端 未结 4 1212
醉酒成梦
醉酒成梦 2020-12-14 09:59

I am trying to select the max value from one column, while grouping by another non-unique id column which has multiple duplicate values. The original database looks somethin

4条回答
  •  不思量自难忘°
    2020-12-14 10:33

    Any non-aggregate column should be there in Group By clause .. why??

                      t1
    x1           y1           z1
    1            2             5
    2            2             7
    

    Now you are trying to write a query like:

    select x1,y1,max(z1) from t1 group by y1;
    

    Now this query will result only one row, but what should be the value of x1?? This is basically an undefined behaviour. To overcome this, SQL will error out this query.

    Now, coming to the point, you can either chose aggregate function for x1 or you can add x1 to group by. Note that this all depends on your requirement.

    If you want all rows with aggregation on z1 grouping by y1, you may use SubQ approach.

    Select x1,y1,(select max(z1) from t1  where tt.y1=y1 group by y1)
     from t1 tt;
    

    This will produce a result like:

                      t1
    x1           y1           max(z1)
    1            2             7
    2            2             7
    

提交回复
热议问题