Как выполнить этот конкретный вопрос / запрос, используя SQL и встроенное представление? - PullRequest
0 голосов
/ 02 мая 2019

В настоящее время я работаю над гостиничным проектом, в котором мне нужно делать запросы с использованием SQL, но я застрял в одном вопросе.

Вопрос в следующем:

Сколько сотрудников сделали по крайней мере 2 бронирования по крайней мере для 3 клиентов?

Я понял, что мне нужно использовать встроенное представление, ноЯ не пошел дальше, потому что застрял в следующей части.

Это таблица в базе данных:

bookingid    | int | primary key    
bookingdate  | date| -   
numOfGuests  | int | -
customerId   | int | foreign key 
employeeId   | int | foreign key


 bookingid | bookingdate | numOfGuests | customerId | employeeId
     1       2016-01-25        4            2             2
     2       2016-06-12        1            3             2
     3       2016-12-05        1            2             2
     4       2016-04-01        2            3             2
     5       2016-11-01        3            2             3
     6       2016-11-03        1            8             2
     7       2017-06-02        6            2             2
     8       2016-02-07        2            8             2
     9       2016-12-25        2            4             5
     10      2017-06-21        1            10            2
     11      2016-08-12        2            10            2
     ...         ...          ...          ...           ...

Так кто-нибудь знает, как выполнить этот вопрос с помощью SQL-запроса, используя встроенное представление?

Результат Iхочу - это идентификатор сотрудника или идентификатор, который удовлетворяет спецификациям вопроса: Результат на основе выборочных данных

CountOfemployeeID |   
        1               

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Пожалуйста, проверьте этот скрипт-

SELECT COUNT(DISTINCT C.employeeId)
FROM
(
    SELECT A.employeeId,B.customerid,COUNT(B.bookingid) T
    FROM (
        --Select users who atlease booked for 3 customer
        SELECT employeeId,COUNT(DISTINCT customerid) customerid
        FROM Table1
        GROUP BY employeeId
        HAVING COUNT(customerid)> 2
    )A
    --Select users who atleast booked twice per customer
    INNER JOIN (
        SELECT bookingid,bookingdate,numOfGuests,customerId,employeeId
        FROM Table1
    ) B
    ON A.employeeId = B.employeeId
    GROUP BY A.employeeId,B.customerid
    HAVING COUNT(B.bookingid) > 1
)C
0 голосов
/ 02 мая 2019
    declare @userData TABLE(
bookingid int,
bookingdate date,   
numOfGuests int,
customerId int,
employeeId int
)

insert into @userData
values
    (1, '2016-01-25', 4, 2, 2),
    (2, '2016-06-12', 1, 3, 3),
    (3, '2016-12-05', 1, 2, 4),
    (4, '2016-04-01', 2, 2, 3),
    (5, '2016-11-12', 3, 2, 3),
    (6, '2017-01-15', 1, 5, 5),
    (6, '2017-01-15', 1, 5, 5),
    (6, '2017-01-15', 1, 5, 5),
    (6, '2017-01-15', 1, 5, 5),
    (6, '2017-01-15', 1, 5, 5),
    (6, '2017-01-15', 1, 5, 5),
    (1, '2016-01-25', 4, 2, 2),
    (2, '2016-06-12', 1, 3, 3),
    (3, '2016-12-05', 1, 2, 4),
    (4, '2016-04-01', 2, 2, 3),
    (5, '2016-11-12', 3, 2, 3),
    (6, '2017-01-15', 1, 2, 5),
    (6, '2017-01-15', 1, 2, 5),
    (6, '2017-01-15', 1, 3, 5),
    (6, '2017-01-15', 1, 3, 5),
    (6, '2017-01-15', 1, 4, 5),
    (6, '2017-01-15', 1, 4, 5),
    (1, '2016-01-25', 4, 2, 2),
    (2, '2016-06-12', 1, 3, 3),
    (3, '2016-12-05', 1, 2, 4),
    (4, '2016-04-01', 2, 2, 3),
    (5, '2016-11-12', 3, 2, 3),
    (6, '2017-01-15', 1, 1, 5),
    (6, '2017-01-15', 1, 2, 5),
    (6, '2017-01-15', 1, 3, 5),
    (6, '2017-01-15', 1, 4, 5),
    (6, '2017-01-15', 1, 7, 5),
    (6, '2017-01-15', 1, 6, 5),
    (1, '2016-01-25', 4, 3, 2),
    (1, '2016-01-25', 4, 3, 2),
    (1, '2016-01-25', 4, 1, 2),
    (1, '2016-01-25', 4, 1, 2)

    select * from @userData

    ; with CTE as
    (
        select count(customerId) count, customerId, employeeId from @userData
        group by customerId, employeeid having count(customerid) >= 2
    ), cte2 as 
    (
        Select employeeId from CTE group by Employeeid having count(employeeId) >= 3
    )
    select count, customerid, employeeid from CTE as a
    inner join CTE2 as b on a.employeeId = b.employeeId

OUTPUT

count customerId    employeeId
    2   1   2
    3   2   2
    2   3   2
    3   2   5
    3   3   5
    3   4   5
    6   5   5

Если вам нужен только EmployeeId, просто выстрелите

Select employeeId from CTE2

выход

Employeeid
2
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...