Re: BUG #18430: syntax error when using aggregate function in where clause of subquery

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #18430: syntax error when using aggregate function in where clause of subquery
Дата
Msg-id 483376.1712949255@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: BUG #18430: syntax error when using aggregate function in where clause of subquery  (Eric Atkin <eatkin@certusllc.us>)
Ответы Re: BUG #18430: syntax error when using aggregate function in where clause of subquery  (Eric Atkin <eatkin@certusllc.us>)
Список pgsql-bugs
Eric Atkin <eatkin@certusllc.us> writes:
> It seems the aggregate function call should be evaluated at the outer layer
> (where it would not be bad syntax) and then is a constant for the inner
> query where clause where an array would be allowed.

Correct, but the problem is not with the array_agg call, it's with
your use of IN.  In the first place, IN requires parens around its
righthand side.  But that only gets us past "syntax error":

regression=# SELECT
    city,
    (SELECT count(*) FROM delivery WHERE driver_id IN (array_agg(driver.id)))
AS deliveries
FROM driver
GROUP BY city
;
ERROR:  operator does not exist: integer = integer[]
LINE 3: ...   (SELECT count(*) FROM delivery WHERE driver_id IN (array_...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

That's because what's inside the parens is supposed to be either a
sub-select or a list of things directly comparable to the LHS.
To do what you're after, you need to use the "scalar = ANY(array)"
construct:

regression=# SELECT
    city,
    (SELECT count(*) FROM delivery WHERE driver_id = any (array_agg(driver.id)))
AS deliveries
FROM driver
GROUP BY city
;
 city | deliveries
------+------------
(0 rows)

IN and =ANY are more-or-less equivalent when the RHS is a sub-select,
but not for an array RHS.

There's nothing particularly wrong with Laurenz's construction,
but it's not necessary to split it up like that.

            regards, tom lane



В списке pgsql-bugs по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: BUG #18429: Inconsistent results on similar queries with join lateral
Следующее
От: Eric Atkin
Дата:
Сообщение: Re: BUG #18430: syntax error when using aggregate function in where clause of subquery