SQL面試題之自連線和關聯子查詢

2021-10-06 11:22:38 字數 1871 閱讀 9800

題目描述

員工表:employee`

+

---------------+---------+

|column name |

type|+

---------------+---------+

| employee_id |

int|

| team_id |

int|

+---------------+---------+

employee_id 欄位是這張表的主鍵,表中的每一行都包含每個員工的 id 和他們所屬的團隊。

編寫乙個 sql 查詢,以求得每個員工所在團隊的總人數。

查詢結果中的順序無特定要求。

查詢結果格式示例如下

employee table:

+-------------+------------+

| employee_id | team_id |

+-------------+------------+|1

|8||

2|8|

|3|8

||4|

7||5

|9||

6|9|

+-------------+------------+

result table:

+-------------+------------+

| employee_id | team_size |

+-------------+------------+|1

|3||

2|3|

|3|3

||4|

1||5

|2||

6|2|

+-------------+------------+

id 為 1、2、3 的員工是 team_id 為 8 的團隊的成員,

id 為 4 的員工是 team_id 為 7 的團隊的成員,

id 為 5、6 的員工是 team_id 為 9 的團隊的成員。

基本思路:

(1)關聯子查詢

因為題目要求統計各個team的數量,因此考慮使用count()和group by來得到各個team的數量:

select team_id,

count

(team_id)

as team_size

from employee

group

by team_id

新的表和原表都有team_id,使用聯結,根據team_id將兩表合併

select e.employee_id, s.team_size

from employee e left

join

(select team_id,

count(*

)as team_size

from employee group

by team_id

)as s

on e.team_id=s.team_id;

(2)使用自身跟自身聯結,然後通過分組得到每個team_id對應的team_size

select e1.employee_id,

count

(e1.employee_id)

as team_size

from employee e1 left

join employee e2

on e1.team_id=e2.team_id

group

by e1.employee_id;

面試題 連線查詢和子查詢

今天碰到個有意思的面試題,主要是被第2小題難住了 和同事靈感碰撞才把問題解決 所以做個demo記錄一下。1 首先我們分別建立 tab user info 和 tab dict 資料表 create table tab user info fld id int 11 not null auto inc...

sql 連線面試題目

create table testtable1 id int identity,department varchar 12 select from testtable1 insert into testtable1 values 設計 insert into testtable1 values 市場...

SQL 面試題之頭疼篇

收集一下最近的sql 面試題和各位一同分享討論,如果大家有更好的思路請拍板 題目一 建表指令碼 if exists select from sysobjects where id object id proceinfo and objectproperty id,isusertable 1 drop...