Skip to content

[Bug] Wrong results: GROUP BY a constant expression returns one row for empty input #2025

Description

@roseduan

Apache Cloudberry version

main branch

What happened

With the Postgres planner (optimizer = off), a query that groups by a constant expression returns one row when the input table is empty. A GROUP BY over zero input rows has zero groups, so the
correct answer is no rows.

GPORCA (optimizer = on) is not affected. Non-empty inputs are not affected — the extra row only appears when the input is empty.

What you think should happen instead

No response

How to reproduce

CREATE TABLE g(c0 boolean) DISTRIBUTED BY (c0);   -- left EMPTY
SET optimizer = off;

SELECT count(*) FROM g GROUP BY 'x'::text;
--  count
-- -------
--      0      <-- WRONG, expected 0 rows

SELECT 1 FROM g GROUP BY (0.25)::MONEY HAVING count(*) = 0;
--  ?column?
-- ----------
--         1   <-- WRONG, expected 0 rows

Expected in both cases: (0 rows).

The plan shows the grouping key disappearing and the final aggregate becoming a plain Aggregate, which always emits one row:

EXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM g GROUP BY 'x'::text;

 Finalize Aggregate
   Output: count(*), 'x'::text
   ->  Gather Motion 3:1  (slice1; segments: 3)
         Output: (PARTIAL count(*))
         ->  Partial GroupAggregate
               Output: PARTIAL count(*)
               ->  Seq Scan on public.g

Workarounds

  • SET optimizer = on; (GPORCA), or
  • SET gp_enable_multiphase_agg = off;

Operating System

any

Anything else

No response

Are you willing to submit PR?

  • Yes, I am willing to submit a PR!

Code of Conduct

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: BugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions