首页 > 解决方案 > 实现包含所有效果的 SQL 查询问题

问题描述

以下是我一直在为这个问题处理的查询。

查找在奥马哈互惠银行员工居住的每个城市都有员工的公司名称。

这意味着,如果 Mutual 在奥马哈、林肯和丹佛等城市都有员工,那么它应该返回的唯一公司名称是在这三个城市都有员工的公司。这也应该返回 Mutual。

以下查询返回在这三个城市中的任何一个城市都有员工的公司。姓氏可供我手动检查它正在计数的员工。

    SELECT COMPANY_NAME, e1.lastname
    FROM EMPLOYEE E1,WORKS W1 
    WHERE E1.CITY IN (SELECT CITY 
      FROM EMPLOYEE E2,WORKS W2 
      WHERE E2.firstname = W2.firstname
        AND E2.lastname = W2.lastname 
        AND W2.COMPANY_NAME= 'Mutual of Omaha')  
    AND E1.firstname = W1.firstname 
    AND E1.lastname = W1.lastname;

我意识到我没有把桌子放下所以他们在这里

员工(姓氏、名字、中间名、性别、街道、城市)

作品(姓氏、名字、中间名、公司名、薪水)

管理(姓氏,名字,MidInitial,ManagerLastname,MFirstName,MMidInitial,开始日期)

标签: sqldatabaseoracle

解决方案


您可以列出公司拥有员工的城市并对其进行加权,因此您将获得一个代表每个公司的单一数字,该数字基于他们拥有员工的位置,一种组号。

然后你可以检查哪些城市有相同的组号。

;with
cities as(select ROW_NUMBER() over (order by city) city_id, city from (select distinct city from employees) c),
chk as (
    select distinct company_name, city_id
    from works w
    join employees e on w.firstname = e.firstname and w.lastname = e.lastname
    join cities c on c.city = e.city
),
cnt as (
    select company_name, SUM(power(cast(2 as bigint), city_id-1)) n
    from chk
    group by company_name
)
select company_name
from cnt
where n = (select n from cnt where company_name = 'Mutual of Omaha')

推荐阅读