[ 
https://issues.apache.org/jira/browse/ASTERIXDB-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yingyi Bu resolved ASTERIXDB-1226.
----------------------------------
    Resolution: Fixed

> Support correlations in the SQL++ core of group-by
> --------------------------------------------------
>
>                 Key: ASTERIXDB-1226
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-1226
>             Project: Apache AsterixDB
>          Issue Type: Bug
>          Components: AsterixDB
>            Reporter: Yingyi Bu
>            Assignee: Yingyi Bu
>
> The current group-by semantics for SQL++ loses the correlation that exists
> in an incoming tuple.
> We should support binding a group to a variable as the core of SQL++.
> The group-by syntax should be:
> GroupbyClause ::=     <GROUP> <BY> ( Expression ( ( <AS> )? Variable )? ( 
> <COMMA> Expression ( ( <AS> )? Variable )? )* )  
> (<GROUP> <AS> Variable <WITH> ( Expression ( ( <AS> )? Identifier )? ( 
> <COMMA> Expression ( ( <AS> )? Identifier )? )* )  )?
> This is an example of the SQL++ core version of GROUP BY:
> Q1: SELECT deptId AS deptId,
>               SUM((SELECT ELEMENT p.e1.salary + p.b1.bonus FROM eb_pairs p)) 
> AS totalCompensation
> FROM Employee e JOIN Bonus b ON e.job_category = b.job_category
> GROUP BY e.department_id as deptId GROUP AS eb_pairs WITH e AS e1, b AS b1
> A syntactic sugar of this query is:
> Q1 (sugar): SELECT deptId AS deptId,
>               SUM(e1.salary + b1.bonus) AS totalCompensation
> FROM Employee e JOIN Bonus b ON e.job_category = b.job_category 
> GROUP BY e.department_id as deptId
> The sugar gets rewritten into the core by replacing expressions in 
> aggregation functions, projection expressions (non-subquery), or "FROM" 
> clauses of subqueries, that contain free variables into subqueries and adding 
> the GROUP AS binding.
> In the above query:
> "e1.salary + b1.bonus" is the expression to be rewritten, and it will become:
> (SELECT ELEMENT p.e1.salary + p.b1.bonus FROM eb_pairs p)
> and at the same time the GROUP AS binding is added:
> "GROUP AS eb_pairs WITH e AS e1, b AS b1"
> In another example syntactic sugar:
> Q2 (sugar): SELECT deptId AS deptId,
>                      (SELECT ELEMENT e.name FROM e as e ORDER BY e.salary 
> LIMIT 3)
> FROM Employee e
> GROUP BY e.department_id as deptId
> The expression to be rewritten in Q2 (sugar) is e.  The core version is:
> Q2: SELECT deptId AS deptId,
>                      (SELECT ELEMENT e1.name FROM 
>                   (SELECT ELEMENT g.e1 FROM ep_pairs AS g) AS e1 
>                ORDER BY e1.salary
>                LIMIT 3)
> FROM Employee e 
> GROUP BY e.department_id as deptId GROUP AS eb_pairs WITH e AS e1



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to