2016-03-12 32 views
0

分到這裏是例子:COUNT行的多個列

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(),但我猜這個人是不是有效的,因爲你首先調用查詢,然後才計算結果。

那麼,有沒有什麼有效的方法可以從GROUP BY多列中獲得COUNT行。

回答

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)。)

+0

至於第一個,sql執行並找到所有的記錄,然後計算結果?它會有效嗎?至於第二個,我得到了這個錯誤'數量錯誤的函數COUNT():' – andiwin

+0

@ kingathur61。 。 。並非所有的數據庫都支持具有多個參數的「count(distinct)」。另一個選項類似於:'count(diistnct concat(Item.purchase_transaction_id,':',ItemType.item_type))'。 –