sql - 实现包含所有效果的 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,开始日期)
解决方案
您可以列出公司拥有员工的城市并对其进行加权,因此您将获得一个代表每个公司的单一数字,该数字基于他们拥有员工的位置,一种组号。
然后你可以检查哪些城市有相同的组号。
;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')
推荐阅读
- java - 如何跳过 xml 标签内的文本验证?
- jquery - 如何在 jquery 模板中隐藏一列
- wpf - 单击任务栏中的任何窗口时,Wpf会打开所有窗口
- mongodb - 限制 Mongoose 在字段后返回数据
- python - 确保草图/流式算法(countSketch)的性能
- mysql - 如何获得前 3 名(有重复项)
- html - 其选项的 HTML 选择标记动画
- azure - Azure 资源管理器中的 possibleOutboundIpAddresses 和 outboundIpAddresses 字段有什么区别?
- javascript - OpenLayers - “文档”元素到底是什么
- python - Apache Spark 和 scikit_learn 之间的 KMeans 结果不一致