fornwall opened a new issue, #26505:
URL: https://github.com/apache/datafusion/issues/26505

   ### Describe the bug
   
   When a correlated scalar subquery aggregates without `GROUP BY` (for example 
with `sum` or `max`), its `HAVING` clause is ignored if the predicate is true 
for an empty input, such as `HAVING sum(y.b) IS NULL` or `HAVING count(*) = 0`.
   
   
   When the `HAVING` clause should filter out the aggregate row, the subquery 
returns the aggregate value instead of `NULL`.
   
   ### To Reproduce
   
   ```shell
   datafusion-cli -c "
   SELECT x.a,
          (SELECT sum(y.b) FROM (VALUES (1, 10)) AS y(a, b) WHERE y.a = x.a 
HAVING sum(y.b) IS NULL) AS v
   FROM (VALUES (1), (2)) AS x(a)
   ORDER BY x.a"
   ```
   
   This currently gives:
   
   ```
   +---+------+
   | a | v    |
   +---+------+
   | 1 | 10   |
   | 2 | NULL |
   +---+------+
   ```
   
   ### Expected behavior
   
   `v` should be `NULL` for both rows, which is what PostgreSQL 17 and SQLite 
return:
   
   - `a = 1`: `sum(y.b)` is 10, so `sum(y.b) IS NULL` is false and the subquery 
returns no row, giving `NULL`.
   - `a = 2`: there are no matching rows, so `sum(y.b)` is `NULL`. The `HAVING` 
passes and the subquery returns `NULL`.
   
   `EXPLAIN` shows no filter for the `HAVING` anywhere in the plan.
   
   ### Additional context
   
   - Also happens with `max`/`min`, and with `HAVING count(*) = 0` while the 
subquery selects `sum(y.b)`.
   - Correct results when the subquery is uncorrelated (`WHERE y.a = 1`), when 
the `HAVING` is false for empty input (for example `HAVING sum(y.b) > 100`), 
and when the subquery selects `count(*)` instead (`HAVING count(*) = 0` gives 
`NULL, 0`).
   - Related but different: #26503 (`count(*)` with an outer column referenced 
in `HAVING`).
   
   Found with DataFusion CLI v55.1.0, `main` at 7e102d74c.
   
   ### Willingness to contribute
   
   None


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to