SQL计数和加入

时间:2011-03-15 01:59:26

标签: sql join count

本学期我正在学习数据库课程,我们正在学习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;

非常感谢任何见解!

3 个答案:

答案 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