[
https://issues.apache.org/jira/browse/CALCITE-4665?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17379680#comment-17379680
]
duan xiong commented on CALCITE-4665:
-------------------------------------
[~yanjing.wang] [~julianhyde] Hi. I do some test in pg and SqlServer.
SqlServer:
{code:java}
select deptno, job, grouping(deptno), grouping(job)
from testschema.emp
group by grouping sets (deptno, job, (deptno, job), (deptno, job, sal)) having
grouping_id(deptno,job,sal)!=0;{code}
is equals to
{code:java}
select deptno, job,grouping(deptno), grouping(job)
from testschema.emp
group by grouping sets (deptno, job, (deptno, job)){code}
PG:
{code:java}
select deptno, job, grouping(deptno), grouping(job)
from emp
group by grouping sets (deptno, job, (deptno, job), (deptno, job, sal)) having
grouping(deptno,job,sal)!=0;{code}
is equals to
{code:java}
select deptno, job,grouping(deptno), grouping(job)
from emp
group by grouping sets (deptno, job, (deptno, job)){code}
So above solution has some problem not *having
grouping_id(deptno,job,sal)!=1<<2-1* but *having grouping_id(deptno,job,sal)
!=0* 。
If you agree with this, Please let me known, I will add this example in aqq.iq
and modify the code.
> When group key is a superset of the union of the groupKeys will generate the
> wrong Sql
> --------------------------------------------------------------------------------------
>
> Key: CALCITE-4665
> URL: https://issues.apache.org/jira/browse/CALCITE-4665
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.22.0
> Reporter: xiejiajun
> Assignee: duan xiong
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.28.0
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> The UT:
> {code:java}
> private RelBuilder example5(RelBuilder builder) {
> return builder
> .scan("EMP")
> .aggregate(builder.groupKey(ImmutableBitSet.of(0, 1 ,2),
> (Iterable<ImmutableBitSet>)
>
> ImmutableList.of(ImmutableBitSet.of(0,1),ImmutableBitSet.of(0))),
> builder.count(false, "C"),
> builder.sum(false, "S", builder.field("SAL"))).filter(
> builder.call(SqlStdOperatorTable.GREATER_THAN, builder.field("C"),
> builder.literal(10)))
>
> .filter(builder.call(SqlStdOperatorTable.EQUALS,builder.field("JOB"),builder.literal("DEVELOP")))
> .project(builder.field("JOB"));
> }
> {code}
> The RelNode will generate the wrong Sql:
> {code:java}
> SELECT "JOB"
> FROM (SELECT "EMPNO", "ENAME", "JOB", COUNT(*) AS "C", SUM("SAL") AS "S"
> FROM "scott"."EMP"
> GROUP BY GROUPING SETS(("EMPNO", "ENAME"), "EMPNO")
> HAVING COUNT(*) > 10) AS "t0"
> WHERE "JOB" = 'DEVELOP'
> {code}
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)