我做不到:

>>> session.query(
        func.count(distinct(Hit.ip_address, Hit.user_agent)).first()
TypeError: distinct() takes exactly 1 argument (2 given)

我能做到:

session.query(
        func.count(distinct(func.concat(Hit.ip_address, Hit.user_agent))).first()

这很好(pageload数据库表中唯一用户的计数).

这在一般情况下是不正确的,例如,下表中的计数是1而不是2:

 col_a | col_b
----------------
  xx   |  yy
  xxy  |  y

有没有办法生成以下SQL(至少在postgresql中有效)?

SELECT count(distinct (col_a, col_b)) FROM my_table;

推荐答案

可以使用tuple_()构造生成精确的查询:

session.query(
    func.count(distinct(tuple_(Hit.ip_address, Hit.user_agent)))).scalar()

Postgresql相关问答推荐

无法从Docker迁移Golang上的两个不同服务到一个数据库'

分区可以用于postgres中的同类查询吗?

Postgres 13.8 -如何在对数据执行窗口操作时返回所有行

PostgreSQL:函数结果表内冲突(...)上的";中的字段名称

在PostgreSQL中,`MY_VARIABLE IN(<;Long_ARRAY_of_Items>;)`何时是FAST?

使用jOOQ在postgres上取消嵌套enum_range

在 Postgres 中,部分索引比普通索引需要更多的时间和成本来执行

将数组的所有元素循环到jsonb中并修改值

需要用 jack/pgx 更新 golang 中复合类型的 PSQL 行

postgres 的密码

保存 geodjango PointField 时出错

如何使用 pg_dump 或 psql 从 *.sql 恢复 PostgreSQL 表?

如何防止materialized 视图在 pg_restore 期间刷新?

如何创建 postgres 数据库模式的 sql 脚本?

向 Postgres 整数数组添加值

如何从 PostgreSQL 中的 Json 数组中获取元素

在 PGAdmin 中搜索所有功能的文本

如何在我的 Mac 上卸载 postgresql(运行 Snow Leopard)

Postgresql滚动删除旧行?

重命名 Amazon RDS 主用户名