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