Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Варианты индивидуальных заданий

.doc
Скачиваний:
12
Добавлен:
15.06.2014
Размер:
41.47 Кб
Скачать

Варианты индивидуальных заданий

  1. Сделать выборку из таблицы department (отделы). Вывести deptno (номер отдела), empno (номер менеджера, где job = ‘MANAGER’) и среднюю зарплату в этом отделе, где зарплата (salary) менеджера больше средней зарплаты по отделу.

SELECT d.deptno, empinfo.avgsal, mgrSalary.salary FROM department d,

TABLE( SELECT INTEGER(AVG(e.salary)) AS avgsal FROM employee e

WHERE e.workdept=d.deptno) AS empinfo,

TABLE ( SELECT employee.salary as salary FROM employee

WHERE d.mgrno=employee.empno ) AS mgrSalary

where mgrSalary.salary > empinfo.avgsal;

  1. Сгруппировать служащих таблицы employee (служащие) по отделам (workdept). Вывести workdept (номер отдела), в котором нет ни одной женщины (sex = ‘M’).

select distinct e.workdept from employee e where not exists

(select * from employee e2 where sex = 'F' AND e2.workdept = e.workdept)

//////////

SELECT workdept, SUM(CASE WHEN emp1.sex='F' THEN 1 ELSE 0 END)

FROM employee emp1

GROUP BY workdept HAVING SUM(CASE WHEN emp1.sex='F' THEN 1 ELSE 0 END)=0

ORDER BY workdept;

///////////////

SELECT DEPTNO FROM DEPARTMENT

GROUP BY DEPTNO HAVING ( SELECT COUNT(*) FROM EMPLOYEE

WHERE EMPLOYEE.WORKDEPT = DEPARTMENT.DEPTNO AND SEX = 'F') = 0;

  1. Сделать выборку из таблицы project (проекты). Вывести deptno (номер отдела) и количество проектов в каждом отделе.

select d.deptno, pr.prcount from department d,

table( select count(*) as prcount from project p where p.deptno=d.deptno) as pr;

SELECT DEPTNO, COUNT(*) as COUNT FROM project GROUP BY DEPTNO;

  1. Сгруппировать записи таблицы sales (продажи) по служащим. Сделать выборку из таблицы sales. Вывести sales_person (фамилия продавца) и количество регионов, в которые они осуществляли продажи (sales).

SELECT t1.p,(SELECT COUNT(DISTINCT region)AS k FROM sales

WHERE sales.sales_person=t1.p ) FROM TABLE (SELECT DISTINCT sales.sales_person AS p FROM sales ) AS t1;

SELECT sales_person, count(distinct region) from sales group by sales_person;

  1. Сделать выборку из таблицы emp_act (активность работников). Вывести empno (номер сотрудника) и количество проектов, в которых он участвует.

select e.empno, em.pro from employee e,

table( select count (*) as pro from emp_act a where a.empno=e.empno) as em;

select empno, count(distinct projno) from emp_act group by empno;

  1. Сделать выборку из таблицы emp_act (активность работников). Вывести projno (номер проекта) и количество actno (заданий) в каждом проекте.]

select p.projno, em.pro from project p,

table( select sum(a.actno) as pro from emp_act a where a.projno=p.projno) as em;

select empno, count(distinct projno) from emp_act group by empno

  1. Сделать выборку из таблицы employee (служащие). Вывести job (название должности), и количество служащих занимающих эту должность. Сгруппировать служащих (empno) по должностям (job).

SELECT job, count(job) FROM employee GROUP by job ORDER by job;

select projno, count(distinct actno) from emp_act group by projno;

  1. Сделать выборку из таблицы employee (служащие). Вывести workdept (номер отдела), в которых женщин (sex= ‘F’) больше, чем мужчин (sex = ‘M’), а также количество женщин в этом отделе и количество мужчин.

SELECT workdept, SUM(CASE WHEN emp1.sex='F' THEN 1 ELSE 0 END),

SUM(CASE WHEN emp1.sex='M' THEN 1 ELSE 0 END)

FROM employee emp1

GROUP BY workdept HAVING SUM(CASE WHEN emp1.sex='F' THEN 1 ELSE 0 END)>

SUM(CASE WHEN emp1.sex='M' THEN 1 ELSE 0 END)

ORDER BY workdept;

select empno, job, t.count from employee e1, table ( select count(*) as count from employee e2 where e2.job = e1.job ) t group by job, empno, t.count;

  1. Сделать выборку из таблицы sales (продажи). Вывести sales_person (фамилия служащего), region (регион) и количество продаж (sales), которые осуществил данный служащий в данном регионе.

select s.sales_person, s.region, sa.suma from sales s,

table( select sum(s1.sales) as suma from sales s1 where s1.region = s.region

and s1.sales_person = s.sales_person) as sa

group by s.sales_person, s.region, sa.suma;

SELECT SALES_PERSON, REGION, SUM(SALES) FROM sales GROUP BY SALES_PERSON, REGION;

  1. Сгруппировать служащих таблицы employee по отделам (workdept), а внутри отдела объединить служащих, у которых дни рождения (birthdate) в одном месяце.

SELECT workdept, lastname, MONTH(birthdate) as Birthday_Month

FROM EMPLOYEE

GROUP BY workdept, MONTH(birthdate), lastname;

select workdept, month(birthdate), empno from employee order by workdept asc, month(birthdate) asc, empno asc

  1. Сгруппировать служащих таблицы employee по отделам (workdept), а внутри отдела объединить в группы служащих, у которых одинаковый уровень образования (edlevel).

SELECT workdept, lastname, edlevel

FROM EMPLOYEE

GROUP BY workdept, edlevel, lastname;

  1. Сгруппировать служащих таблицы employee по отделам (workdept), а внутри отдела объединить в группы сотрудников, у которых одинаковая должность (job).

SELECT workdept, job, lastname

FROM EMPLOYEE

GROUP BY workdept, job

  1. Сделать выборку из таблицы employee (служащие). Для всех уровней образования (edlevel) вывести количество служащих с одинаковым уровнем образования. Сгруппировать служащих (empno) по уровню образования (edlevel).

select e.empno, e.edlevel, emp.ecount from employee e,

table( select count(e1.edlevel) as ecount from employee e1 where e1.edlevel=e.edlevel)

as emp order by e.edlevel;

  1. Сделать выборку из таблицы employee (служащие). Вычислить среднюю зарплату в организации, т.е. по всей таблице employee, и количество служащих, получающих эту зарплату (salary).

select distinct e.workdept, emp1.deptavg, emp2.N from employee e,

table (select integer(avg(e1.salary)) as deptavg from employee e1

where e1.workdept = e.workdept) as emp1,

table (select count(e2.empno) as N from employee e2 where e2.salary = emp1.deptavg)

as emp2;

select empno, edlevel, t.count from employee e1, table ( select count(edlevel) as count from employee e2 where e1.edlevel = e2.edlevel ) t

order by edlevel