【发布时间】:2014-12-02 15:28:29
【问题描述】:
我正在尝试为我的数据库中的每个计算机制造商型号组合计算三个特定的东西。这三件事是连击数,每个连击借用的学生人数,以及电脑被借用的总次数。最后两个是不同的,因为学生可以多次借用相同的组合。最后一部分是获取每一列的总计(这在我的查询中似乎工作不正确)。我开发了以下查询。
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.
每个特定组合行中的计数都是正确的。我已经用原始数据验证了这一点。但是,收到的用户总数不正确。我做了一些调查并注意到分组集给了我数据库中的学生总数。不是唯一的学生制造模型组合的总数。我相信其他两个总计也会发生这种情况,但这是正确的结果。提前感谢您的所有帮助!
【问题讨论】:
-
查询的哪一部分正在获得 15,10,19 的底部计数......在我看来,您似乎只能获得每个制造商和型号组合的计数,而不是每个列的总数
-
没关系,不知道分组集做了什么.....试着从你的计数中取出不同的东西
-
取出不同的结果让我的计数与最后一列相同