Sql 使用具有多个计数列的分组集

Sql 使用具有多个计数列的分组集,sql,count,grouping,Sql,Count,Grouping,我正试图为数据库中的每个计算机制造商型号组合获得三个具体的数据。这三件事是组合的数量,借用每个组合的学生人数,以及借用计算机的总次数。最后两个不同,因为学生可以多次借用同一组合。最后一部分是获得每列的总计(在我的查询中,这似乎不正确)。我开发了以下查询 SELECT item_manuf||'-'|| item_model "item", count(DISTINCT comp_id) "Num Comps", count(DISTINCT st_id) "Num Users

我正试图为数据库中的每个计算机制造商型号组合获得三个具体的数据。这三件事是组合的数量,借用每个组合的学生人数,以及借用计算机的总次数。最后两个不同,因为学生可以多次借用同一组合。最后一部分是获得每列的总计(在我的查询中,这似乎不正确)。我开发了以下查询

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.

每个特定组合行中的计数都是正确的。我已经用原始数据证实了这一点。但是,收到的用户总数不正确。我做了一些调查,发现分组集给了我数据库中的学生总数。不是唯一学生制造模型组合的总数。我相信其他两个总数也是如此,但这是正确的结果。提前感谢您的帮助

在您的情况下,分组集合不会给出总计。等效查询为:

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

查询的哪一部分是获取底部计数15,10,19…对我来说,似乎您只获取每个manuf和model组合的计数,而不是每个Col的总数,不要紧,不知道分组集做了什么…..尝试从您的计数中提取distinct提取与上一列相同的计数这实际上给了我与上述查询相同的结果。我可以合并并总结每一列吗?@kirie它给出了相同的结果,因为我试图解释分组集是如何工作的——它只是合并了不同的分组together@kirie你确定这个总数会给我们带来有用的东西吗?哦,我现在明白了。谢谢你的解释。我考虑了如何创建数据透视表,我们使用这些数据透视表的计数总和。