按多列

时间:2016-03-12 03:12:58

标签: sql sqlalchemy

以下是示例:

SELECT Item.purchase_transaction_id, ItemType.item_type, COUNT(Item.id) 
FROM Item GROUP BY Item.purchase_transaction_id, Item.item_type_id

因此,在此查询之后,我想获得行结果的总数量,或者您可以将结果称为COUNT。我不知道如何用SQL做到这一点但是使用SqlAlchemy我可以这样做

q = db.session.query(Item.purchase_transaction_id, ItemType.item_type, 
func.count(Item.id)).group_by(Item.purchase_transaction_id, Item.item_type_id)

并获取count我只是致电q.count(),但我猜这个效率不高,因为您先调用查询然后才计算结果。

那么,是否有任何有效的方法可以从COUNT多列中获取GROUP BY行。

1 个答案:

答案 0 :(得分:0)

一种方法是子查询:

SELECT COUNT(*)
FROM (SELECT Item.purchase_transaction_id, ItemType.item_type, COUNT(Item.id) 
      FROM Item
      GROUP BY Item.purchase_transaction_id, Item.item_type_id
     ) i;

如果值不是NULL且基础数据库支持它,那么您也可以这样做:

SELECT COUNT(DISTINCT Item.purchase_transaction_id, ItemType.item_type)
FROM Item;

(否则,您可以将值连接在一起并仍然使用COUNT(DISTINCT)。)