avatar
这个SQL面试题怎么做# JobHunting - 待字闺中
t*e
1
一个table,就两个field, ManagerID 和 direct Reporter ID
要求是得出每个manager下面的有多少direct和indirect reporters
avatar
z*u
2
试着写了下self join:
select count(distinct dr.drid) as indr_cnt, count(distinct m.drid) as dr_cnt
, m.managerid
from table as dr
join table as m
on dr.managerid=m.drid
group by m.managerid
avatar
q*x
3
direct:
select ManagerId, count(ReporterId)
from table
group by 1
indirect:
i wonder if sql can do this.

【在 t*****e 的大作中提到】
: 一个table,就两个field, ManagerID 和 direct Reporter ID
: 要求是得出每个manager下面的有多少direct和indirect reporters

avatar
q*x
4
can this query count n-level indirect reports?

cnt

【在 z*******u 的大作中提到】
: 试着写了下self join:
: select count(distinct dr.drid) as indr_cnt, count(distinct m.drid) as dr_cnt
: , m.managerid
: from table as dr
: join table as m
: on dr.managerid=m.drid
: group by m.managerid

avatar
e*s
5
这个应该得用recursion

【在 q****x 的大作中提到】
: can this query count n-level indirect reports?
:
: cnt

avatar
h*d
6
single query肯定不行,可以搞temp table什么的一层一层递归?

【在 q****x 的大作中提到】
: can this query count n-level indirect reports?
:
: cnt

avatar
l*8
7
一个公司的管理层次也就几层到十几层吧?
用个比较土的sql也应该能写出来。

【在 e*******s 的大作中提到】
: 这个应该得用recursion
avatar
e*s
8
问题是不知道有多少层啊, 算是unbounded computation, 简单的SQL估计不行.
试着写了一个
假设已有那个表是Direct(mID, dID), mID是manager id, dID是相应的direct report
ID.
那第一问可以用楼上矿工写的
select mID, count(dID)
from Direct
group by mID;
第二问, 求每个manager的所有report (indirect + direct),可以:
with recursive
Indirect(manager, reporter) as (select mID as manager, dID as reporter from
Direct
union
select Indirect.manager, Direct.dID as reporter
from Indirect, Direct
where Indirect.reporter = Direct.mID)
然后就和第一问一样了:
select manager, count(reporter)
from Indirect
group by manager;

【在 l*********8 的大作中提到】
: 一个公司的管理层次也就几层到十几层吧?
: 用个比较土的sql也应该能写出来。

avatar
d*e
9
如果是oracle sql的话,可以试试connected by,我没验证,但或者可以试试看看如何
利用level这个变量。
http://www.adp-gmbh.ch/ora/sql/connect_by.html

【在 t*****e 的大作中提到】
: 一个table,就两个field, ManagerID 和 direct Reporter ID
: 要求是得出每个manager下面的有多少direct和indirect reporters

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。