我正在尝试为我的数据库中的每个计算机制造商-型号组合获取三个特定的东西。这三件事是组合的数量,每个组合借阅的学生数量,以及计算机被借阅的总次数。后两者是不同的,因为学生可以多次借用相同的组合。最后一部分是获取每个列的总计(这似乎在我的查询中不能正确工作)。我开发了以下查询。
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.每个特定组合行中的计数都是正确的。我已经用原始数据验证了这一点。但是,收到的总用户数是不正确的。我做了一些调查,注意到分组集给出了我们在数据库中的学生总数。不是唯一的学生手册模型组合的总数。我相信其他两个总数也会出现这种情况,但这是正确的结果。提前感谢您的帮助!
发布于 2014-12-03 00:06:23
在您的情况下,分组集不会给出总计。等价的查询是:
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);https://stackoverflow.com/questions/27253001
复制相似问题