2

此查询的目标是在我的数据库中查找每家公司的平均员工人数。这是我目前的查询以及我的结果:

create view Totals as
((select distinct count(company_name) as TotalCompanies, company_name
  from company
  group by company_name)
 union
(select distinct count(Lastname) as TotalEmps, company_name
   from Works
   group by company_name));


select avg(TotalCompanies) from Totals;

--RESULT:
AVG(TOTALCOMPANIES)
2.777777777778

虽然我确实得到了结果(所以我不相信有任何语法错误),但根据我输入到表格中的实际数据,我不相信这个值是正确的。

我在视图创建中所做的是否甚至让我到了一个适当的点,我可以调用该视图的 TotalCompanies 字段的平均函数?我的意图是计算视图中每个公司名称的所有员工,然后平均这些值......

仅供参考,我正在使用 SQL for Oracle 11g R2,这是我正在为其创建查询的初始模式:

create table Employee(
    Lastname    varchar(10),
    FirstName   varchar(10),
    MidInitial  char(1),
    gender      char(1),
    street      varchar(10),
    city        varchar(10),
    primary key(Lastname, FirstName, MidInitial));

create table company(
    company_name    varchar(20),
    city    varchar(10),
    primary key(company_name));

create table Works(
    Lastname    varchar(10),
    FirstName   varchar(10),
    MidInitial  char(1),
    company_name    varchar(20),
    salary      numeric(8,2),
    primary key(Lastname, FirstName, MidInitial, company_name),
    foreign key(Lastname, FirstName, MidInitial) references Employee,
    foreign key(company_name) references company);

谢谢您的帮助!

4

2 回答 2

0

创建一个视图来存储在每个员工中工作的员工总数。

create view Totals as
    (select count(*) as No_of_employees,company_name from Employee,Works
     where Employee.Lastname = Works.Lastname and
         Employee.FirstName = Works.FirstName and
         Employee.MidInitial = Works.MidInitial
     group by Works.company_name);

现在编写一个查询来查找在每家公司工作的平均员工人数:

select avg(No_of_employees) from Totals;

这应该会给你正确的答案。我用 MySQL 试过这个。请原谅我的任何错别字。

于 2014-10-20T19:36:48.460 回答
0

撇开有关架构的问题不谈,我相信以下方法会起作用:

Select
    Avg(employeeCount)
From (
    Select
        company_name,
        count(coalesce(w.LastName, w.FirstName, w.MidInitial)) employeeCount
    From
        company c
            left outer join
        works w
            on c.company_name = w.company_name
    Group By
       company_name
) x

处理员工人数为 0 的公司以及名称之一为 null 的公司有点棘手(我不确定 Oracle 是否真的允许在主键列中使用它,但定义似乎暗示了这一点)

于 2013-09-22T18:13:33.200 回答