• Tomas Vondra's avatar
    Implement GROUP BY DISTINCT · be45be9c
    Tomas Vondra authored
    With grouping sets, it's possible that some of the grouping sets are
    duplicate.  This is especially common with CUBE and ROLLUP clauses. For
    example GROUP BY CUBE (a,b), CUBE (b,c) is equivalent to
    
      GROUP BY GROUPING SETS (
        (a, b, c),
        (a, b, c),
        (a, b, c),
        (a, b),
        (a, b),
        (a, b),
        (a),
        (a),
        (a),
        (c, a),
        (c, a),
        (c, a),
        (c),
        (b, c),
        (b),
        ()
      )
    
    Some of the grouping sets are calculated multiple times, which is mostly
    unnecessary.  This commit implements a new GROUP BY DISTINCT feature, as
    defined in the SQL standard, which eliminates the duplicate sets.
    
    Author: Vik Fearing
    Reviewed-by: Erik Rijkers, Georgios Kokolatos, Tomas Vondra
    Discussion: https://postgr.es/m/bf3805a8-d7d1-ae61-fece-761b7ff41ecc@postgresfriends.org
    be45be9c
outfuncs.c 104 KB