-1

関係は次のとおりです。

CREATE TABLE employee (
  name    varchar2(15) not null, 
  ssn      char(9),
  sex      char,
  salary   number(10,2),
  dno      number(4),
  primary key (ssn),
  foreign key (dno) references department(dnumber)
);

CREATE TABLE department (
  dname        varchar2(15) not null,
  dnumber      number(4),
  primary key (dnumber),
  unique (dname),
);

Q1: 従業員の平均給与が $30,000 を超える部門ごとに、部門名とその部門で働いている従業員の数を取得します。

Q2: 部門の平均と従業員数を計算するために、(Q1 のように) すべての従業員ではなく、各部門の男性従業員の数が必要であるとします。このクエリを SQL で指定できますか? 理由または理由。

ありがとう!

4

3 に答える 3

1

最初のクエリは次のようになります

SELECT d.dname,
       COUNT(*) total_employees
  FROM department d LEFT JOIN
       employee e ON d.dnumber = e.dno
 GROUP BY d.dname
HAVING AVG(e.salary) > 30000;

そして2つ目

SELECT d.dname,
       COUNT(*) male_employees
  FROM department d LEFT JOIN
       employee e ON d.dnumber = e.dno
 WHERE e.sex = 'M'
 GROUP BY d.dname
HAVING AVG(e.salary) > 30000;

SQLフィドル

于 2013-04-10T20:31:38.453 に答える
0

全従業員数と男性従業員数を1つのSQLで取得したい場合は、こちらをお試しください。

SELECT B.DNAME,
COUNT(*) AS TOTAL_EMPLOYEES,
COUNT(CASE WHEN A.SEX='M' THEN A.SEX END) AS MALE_EMPLOYEES,
AVG(A.SAL) AS ALL_AVG,
AVG(CASE WHEN A.SEX='M' THEN A.SAL END) AS MALE_AVG
FROM EMPLOYEE A JOIN DEPARTMENT B
ON A.DNO=B.DNUMBER
GROUP BY B.DNAME
于 2013-04-11T01:37:54.377 に答える
0
SELECT dname, COUNT(*) AS Num_of_Employees    
FROM   employee, department    
WHERE  dno = dnumber AND EXISTS (
       SELECT AVG(Salary)    
       FROM   employee    
       GROUP BY dno    
       HAVING AVG(Salary)>30000)    
GROUP BY dname;    
于 2014-12-09T21:06:32.707 に答える