Реляционный API DuckDB Python, эквивалент фильтра select sum(a) (где b>1)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Реляционный API DuckDB Python, эквивалент фильтра select sum(a) (где b>1)

Сообщение Anonymous »

Если да,

Код: Выделить всё

rel = duckdb.sql('select * from values (1, 4), (1, 2), (2, 3), (2, 4) df(a, b)')
Я хотел бы сделать эквивалент

Код: Выделить всё

In [9]: duckdb.sql('select sum(a) filter (where b>1) from rel')
Out[9]:
┌───────────────────────────────┐
│ sum(a) FILTER (WHERE (b > 1)) │
│            int128             │
├───────────────────────────────┤
│                             6 │
└───────────────────────────────┘
но используя реляционный API Python
Я пробовал

Код: Выделить всё

rel.select(duckdb.FunctionExpression('sum', duckdb.FunctionExpression('filter', duckdb.ColumnExpression('a'), duckdb.ColumnExpression('b')>1)))
но получите

Код: Выделить всё

---------------------------------------------------------------------------
BinderException                           Traceback (most recent call last)
Cell In[10], line 1
----> 1 rel.select(duckdb.FunctionExpression('sum', duckdb.FunctionExpression('filter', duckdb.ColumnExpression('a'), duckdb.ColumnExpression('b')>1)))

BinderException: Binder Error: No function matches the given name and argument types 'filter(INTEGER, BOOLEAN)'. You might need to add explicit type casts.
Candidate functions:
filter(ANY[], LAMBDA) -> ANY[]
Как это должно быть написано?


Подробнее здесь: https://stackoverflow.com/questions/793 ... r-where-b1
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»