【问题标题】:SQLAlchemy - count status is trueSQLAlchemy - 计数状态为真
【发布时间】:2017-09-12 20:57:02
【问题描述】:

我在数据库中有两个表。一个名为 company,另一个名为 company_map。 公司表如:

C_ID NAME  Contact
1    a     12334   
2    b     12335
3    c     12336
4    d     12337
5    e     12338

company_map 表如:

M_ID C_ID  STATUS
1     1     True   
2     1     False
3     1     True
4     3     True
5     3     True

我需要计算company_map 表中STATUS 为true 的数量,按C_ID 分组。比如我需要得到C_ID的个数是1,它的STATUS是true,应该是2。我现在可以得到C_ID的个数,通过使用func.count(company_map.C_ID),它会得到3。但是如何计算 STATUS == true()?我尝试了一些方法,但没有一个有效。

【问题讨论】:

  • 我试过这个方法,它有效:.having(func.count(case([(company_map.STATUS, 1)]))

标签: python sql postgresql sqlalchemy


【解决方案1】:

我从SQLAlchemy func.count on boolean column得到了想法

.having(func.count(case([(company_map.STATUS, 1)])) < func.count(company_map.C_ID)) 

如果你的 SQLAlchemy 是最新版本,可以使用

.having(func.count(1).filter(company_map.STATUS))

比旧的更干净。

【讨论】:

  • 如果你使用的是合适的 Postgresql 和 SQLAlchemy 版本,你也可以只使用func.count(1).filter(company_map.STATUS),这样看起来更容易一些。
  • @Ilja Everilä 谢谢。我试过了,它返回计数没有属性“过滤器”。我想也许我的 SQLAlchemy 是旧版本。但是 count(1).filter() 更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2022-01-27
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
相关资源
最近更新 更多