首页 > Group By的原理是什么?如果补充Groupby的列,使其和Select的列一致(聚集函数除外)会影响性能吗?

Group By的原理是什么?如果补充Groupby的列,使其和Select的列一致(聚集函数除外)会影响性能吗?

问题:

现有的代码形式类似如下(涉及两张表a,b):
SELECT a.*,sum(b.quantity),sum(b.amount)
  FROM a,b
 WHERE a.id = b.relation_id
 GROUP BY a.id
注:其中表a只有一个主键(id)

这段sql在mysql是可以跑过,但是在postgresql里面因为有要求groupby的列要和select列一一对应,所以会报错。
为了提高可移植性,改成如下两种形式。因为不知道groupby的原理是什么,想问下下面两种哪种性能比较高?

形式A:(补充groupby的列数,使其和select一一对应)
SELECT a.*,sum(b.quantity),sum(b.amount)
  FROM a,b
 WHERE a.id = b.relation_id
 GROUP BY a.id,a.index1,a.index2...

形式B:(先查出每笔数据的id集合,在根据id查出其他信息)
SELECT aa.*,t.quantity,t.amount
  FROM(
    SELECT a.id,sum(b.quantity) as quantity,sum(b.amount) as amount
      FROM a,b
     WHERE a.id = b.relation_id
     GROUP BY a.id)t,a aa
 WHERE aa.id = t.id
 
 针对形式A来说的话,GROUP BY a.id之后,再对a.index1进行GROUP BY的时候,此时a.index1其实已经是唯一确定,不可能有多笔数据的了.不知道mysql对这种情况怎么处理?
【热门文章】
【热门文章】