題目描述
員工表: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...