Функция подсчета - SQL - PullRequest
       22

Функция подсчета - SQL

2 голосов
/ 15 апреля 2020

У меня есть эти таблицы практики для работы:

create table complaints (compid int, compdate date, fineid int, description varchar)
insert into complaints values
(1010, '24-FEB-2017', 10001, NULL),
(1011, '01-AUG-2017', 10003, NULL),
(1012, '30-JUL-2017', 10004, NULL),
(1013, '02-MAR-2017', 10001, NULL)

create table Fines (fineID int, finedate date, empid int, amount int)
insert into Fines values
(10001, '01-FEB-2017', 1, 250),
(10002, '11-MAR-2017', 2, 250),
(10003, '25-JUN-2017', 4, 500),
(10004, '23-JUL-2017', 4, 250)
(10005, '31-JUL-2017', 3, 250)

create table Employees (empid int, empname nvarchar(100), workingsince date)
insert into Employees values
(1,'John','01-JAN-2007'),
(2,'Abe','01-JUL-2008'),
(3,'Don','01-JAN-2013'),
(4,'Gon','01-JAN-2017')

Теперь я хочу создать запрос, который будет показывать мне имя каждого сотрудника, количество штрафов и количество жалоб (все в та же таблица - empname, NumofFines, NumOfComp).

Кажется, мне нужны 2 столбца с функцией count, и я не могу найти способ сделать это.

1 Ответ

3 голосов
/ 15 апреля 2020

Вы можете использовать агрегацию:

select 
    e.empname,
    count(distinct f.fineid) no_fines,
    count(distinct c.compid) no_complaints
from employees e
left join fines f      on f.empid = e.empid
left join complaints c on c.fineid = f.fineid
group by e.empid, e.empname

Демонстрация на DB Fiddle :

empname | no_fines | no_complaints
:------ | -------: | ------------:
Abe     |        1 |             0
Don     |        1 |             0
Gon     |        2 |             2
John    |        1 |             2
...