本学期我正在学习数据库课程,我们正在学习SQL。我理解大多数简单的查询,但是我在使用count聚合函数时遇到了一些困难。
我应该将广告编号与属性编号关联到分支编号,以便我可以按分支编号计算广告数量并计算其成本。我设置了我认为是两个适当的新视图,但我对于为select语句写什么一无所知。我接近这个正确的方法吗?我有一种感觉,我过度复杂化了......
with ad_prop(ad_no, property_no, overseen_by) as
(select a.ad_no, a.property_no, p.overseen_by
from advertisement as a, property as p
where a.property_no = p.property_no)
with prop_branch(property_no, overseen_by, allocated_to) as
(select p.property_no, p.overseen_by, s.allocated_to
from property as p, staff as s
where p.overseen_by = s.staff_no)
select distinct pb.allocated_to as branch_no, count( ??? ) * 100 as ad_cost
from prop_branch as pb, ad_prop as ap
where ap.property_no = pb.property_no
group by branch_no;
非常感谢任何见解!
答案 0 :(得分:0)
您可以像这样简化:
广告
- ad_no
- property_no
属性
- property_no
- overseen_by
人员
- staff_no
- allocated_to
SELECT s.allocated_to AS branch, COUNT(*) as num_ads, COUNT(*)*100 as ad_cost
FROM advertisement AS a
INNER JOIN property AS p ON a.property_no = p.property_no
INNER JOIN staff AS s ON p.overseen_by = s.staff_no
GROUP BY s.allocated_to;
更新:更改上方以符合您的架构需求
答案 1 :(得分:0)
我可以告诉你,你做得太复杂了。它应该是一个带有几个连接的select语句。您应该重新阅读有关联接的章节或查看以下链接
http://www.sql-tutorial.net/SQL-JOIN.asp
加入允许您“合并”来自两个表格之间 on 两个表格的两个表格中的数据(您可以将更多表格与更多加入强>)。一旦你有这个“加入”表,你可以假装它实际上是一个表(别名用于指示该列的来源)。您了解聚合如何在单个表上工作吗?
我宁愿不给你答案,以便你可以真正学习:)
答案 2 :(得分:0)
您可以将WITH子句压缩为单个语句。然后,我认为您缺少的部分是,如果它们未包含在GROUP BY子句中,则必须聚合列定义中引用的列。因此,您对您的不同列进行GROUP BY,然后在列定义中应用聚合和数学。
SELECT
s.allocated_to AS branch_no
,COUNT(a.ad_no) AS ad_count
,(ad_count * 100) AS ad_cost
...
GROUP BY s.allocated_to