Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-2224

WITHIN GROUP clause for aggregate functions

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.18.0
    • None
    • None

    Description

      The WITHIN GROUP clause lets aggregate functions operate on a sorted list of rows, rather than the usual unsorted collection. Order only matters for a few aggregate functions, but we should allow it for all.

      Other analytic functions where WITHIN GROUP would have an effect: RANK, PERCENT_RANK, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC.

      LISTAGG(value [, separator]) is an Oracle function that concatenates strings. E.g.

      SELECT LISTAGG(last_name, '; ')
               WITHIN GROUP (ORDER BY hire_date, last_name)
        FROM Emp
      GROUP BY deptno

      STRING_AGG(value [, separator]) is a [Microsoft SQL Server function|] that does something similar.

      GROUP_CONCAT(value [, separator] [ORDER BY expr [, expr]...) is the MySQL equivalent to LISTAGG. Note the optional ORDER BY clause within the parentheses.

      COLLECT(value) is a SQL standard aggregate function that creates multisets. Oracle added a non-standard ORDER BY clause within the parentheses.

      In my opinion, WITHIN GROUP should always be optional. LISTAGG without WITHIN GROUP would produce non-deterministic output (which is OK); other aggregate functions such as MIN and SUM would just ignore WITHIN GROUP.

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            julianhyde Julian Hyde
            julianhyde Julian Hyde
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment