SQLAlchemy - 计数状态为true

时间:2017-09-12 02:43:27

标签: python sql postgresql sqlalchemy

我在db中有两个表。一个名为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为真的数字,按C_ID分组。例如,我需要得到C_ID的数量是1并且其STATUS为真,它应该是2.我现在可以得到C_ID的数量,通过使用func.count(company_map.C_ID),它将得到3.但是如何计算STATUS == true()?我尝试了一些方法,但没有一种方法可以使用。

2 个答案:

答案 0 :(得分:2)

我从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))

比旧的更干净。

答案 1 :(得分:0)

以下内容会有所帮助。

 SELECT C_ID, COUNT(C_ID) AS 'Count' 
 FROM company_map
 WHERE STATUS = 'TRUE' 
 GROUP BY C_ID
 ORDER BY C_ID ASC