获得出席人数的百分比率

时间:2013-10-30 20:16:10

标签: sql oracle

我需要一个部门列表以及该部门中将参加的人员百分比。

输出:

  • SALES = 30%参加
  • 会计= 15%参加

表EMP:

EMPID FNAME LNAME    DEPT
001......John......Lock...Sales
002......Lisa......Conrad...Accounting
003......Jerry.....Forts...Billing
004......Sara......Duval...Sales

表出席:

EMPID  PARTY_ATTEND
001......Y
002......N
003......N
004......Y

有人能指出我正确的方向吗?我写了一些代码,但我不知道如何将所有内容组合在一起。我打算使用JOIN和一些计数器,但这是我到目前为止所拥有的......

select fname, lname, a.party_attend, a.empid from emp

select count(*) 
  from attendance a
 inner join emp on a.empid = emp.empid
 where a.party_attend = 'Y'

那么数学部分我不确定......

select sum(  )/count(*)*100

帮助?我的大脑被炒了......

1 个答案:

答案 0 :(得分:2)

试试这个:

CREATE TABLE emp (
  empid NUMBER,
  fname VARCHAR2(20),
  dept VARCHAR2(20)
);

CREATE TABLE attendance (
  empid NUMBER,
  party_attend VARCHAR2(1)
);

INSERT INTO emp VALUES (1,' John', 'Sales');
INSERT INTO emp VALUES (2,' Lisa', 'Accounting');
INSERT INTO emp VALUES (3,' Jerry', 'Billing');
INSERT INTO emp VALUES (4,' Sara', 'Sales');

INSERT INTO attendance VALUES (1, 'Y');
INSERT INTO attendance VALUES (2, 'N');
INSERT INTO attendance VALUES (3, 'N');
INSERT INTO attendance VALUES (4, 'Y');

COMMIT;

SELECT
    e.dept,
    COUNT(DECODE(att.party_attend, 'Y', 1, NULL)) / COUNT(1) * 100 AS percentage
  FROM
    emp e JOIN attendance att ON (e.empid = att.empid)
GROUP BY e.dept;

输出:

DEPT                 PERCENTAGE
-------------------- ----------
Accounting                    0 
Billing                       0 
Sales                       100 

输出不是您所期望的,因为在您的数据中,参加聚会的所有员工都来自销售部门......