2014-12-02 24 views
0

我想爲我的數據庫中的每個計算機制造商模型組合計算三個特定事件。這三件事是組合的數量,每個組合借用的學生數量以及計算機借用的總次數。最後兩個不同,因爲學生可以不止一次借用相同的組合。最後一部分是爲每列獲得總計(這似乎在我的查詢中工作不正確)。我開發了以下查詢。使用具有多個計數列的分組集

SELECT item_manuf||'-'|| item_model "item", 
    count(DISTINCT comp_id) "Num Comps", 
    count(DISTINCT st_id) "Num Users", 
    count(loan_id) "Num Loans" 
FROM computer 
JOIN item USING (item_id) 
JOIN loan USING (comp_id) 
GROUP BY GROUPING SETS((Item_Manuf, 
    Item_Model),()); 

而生成的表:

item             Num Comps Num Users Num Loans 
--------------------------------------------------- ---------- ---------- ---------- 
Acer-Aspire             1   1   1 
Apple-Macbook Air           1   1   1 
Apple-Macbook Pro           1   1   1 
Dell-Alienware            1   1   1 
Dell-Inspiron            2   3   3 
HP-Elitebook             2   3   3 
HP-Envy              2   1   2 
HP-Pavilion             3   2   3 
HP-Stream Notebook           1   1   1 
Lenovo-ThinkPad            1   3   3 
-               15   10   19 

11 rows selected. 

在每一個具體的連擊行的計數是正確的。我用原始數據證實了這一點。但是,用戶數量的總計不正確。我已經做了一些調查,並注意到分組集給我的數據庫中的學生總數。不是獨特的學生 - 製造模型組合的總數。我相信其他兩個總數也是如此,但這是正確的結果。預先感謝您的幫助!

+0

這是什麼RDBMS? – 2014-12-02 15:31:45

+0

這是oracle 11g – kirie 2014-12-02 15:33:14

+0

查詢的哪一部分是獲得15,10,19的底部計數....對我來說,看起來你只能得到每個製造商和模型組合的計數,而不是每個列的總數 – Stc5097 2014-12-02 15:46:17

回答

0

GROUPING SETS在你的情況下不會給你總計。等效查詢是:

SELECT item_manuf||'-'|| item_model "item", 
    count(DISTINCT comp_id) "Num Comps", 
    count(DISTINCT st_id) "Num Users", 
    count(loan_id) "Num Loans" 
FROM computer 
JOIN item USING (item_id) 
JOIN loan USING (comp_id) 
GROUP BY Item_Manuf, Item_Model 
UNION ALL 
SELECT null, 
    count(DISTINCT comp_id) "Num Comps", 
    count(DISTINCT st_id) "Num Users", 
    count(loan_id) "Num Loans" 
FROM computer 
JOIN item USING (item_id) 
JOIN loan USING (comp_id); 
+0

這實際上給了我與上述查詢相同的結果。我可以合併,然後求和每一列嗎? – kirie 2014-12-02 16:09:44

+0

@kirie它給了你相同的,因爲我試圖解釋如何分組集合的作品 - 它只是團結不同的組合 – Multisync 2014-12-02 16:11:16

+0

@kirie你確定總和會給這裏有用嗎? – Multisync 2014-12-02 16:12:34

相關問題