You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2014/10/08 03:17:34 UTC

[jira] [Commented] (PHOENIX-945) Support correlated subqueries in comparison without ANY/SOME/ALL

    [ https://issues.apache.org/jira/browse/PHOENIX-945?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14162897#comment-14162897 ] 

James Taylor commented on PHOENIX-945:
--------------------------------------

Wow, +1. You implemented correlated subquery support by adding about 50 lines of code?!  That's pretty awesome! What kind of limitations are there outside of only allowing the correlation in a comparison expression?

Minor nit: might be worth having a copy constructor to help with readability:
{code}
+        subquery = NODE_FACTORY.select(subquery.getFrom(), subquery.getHint(), subquery.isDistinct(), 
+                selectNodes, where, groupbyNodes, subquery.getHaving(), subquery.getOrderBy(), 
+                subquery.getLimit(), subquery.getBindCount(), true, subquery.hasSequence());
+
{code}

> Support correlated subqueries in comparison without ANY/SOME/ALL
> ----------------------------------------------------------------
>
>                 Key: PHOENIX-945
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-945
>             Project: Phoenix
>          Issue Type: Sub-task
>    Affects Versions: 3.0.0, 4.0.0, 5.0.0
>            Reporter: Maryann Xue
>            Assignee: Maryann Xue
>             Fix For: 3.0.0, 4.0.0, 5.0.0
>
>         Attachments: 945.patch
>
>   Original Estimate: 336h
>  Remaining Estimate: 336h
>
> Example:
>  SELECT employee_number, name
>    FROM employees AS Bob
>    WHERE salary > (
>      SELECT AVG(salary)
>        FROM employees
>        WHERE department = Bob.department);
> Basically we can optimize these queries into join queries, like:
>  SELECT employees.employee_number, employees.name
>    FROM employees INNER JOIN
>      (SELECT department, AVG(salary) AS department_average
>        FROM employees
>        GROUP BY department) AS temp ON employees.department = temp.department
>    WHERE employees.salary > temp.department_average;



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