继续请教一个SQL应该如何写

jiaping108 2017-02-15 07:50:33
部门表a{
depid;
depname
}
部门员工表b{
usersid;
depid;
}
员工奖金表c{
upid;
usersid;
payment;
type: 1是人民币,2是美元
}
查询结果:
部门名称(depname) 部门员工数(count(usersid) group by depid) 部门已经发放奖金的员工数(count(usersid)group by depid in c )
三张表,有些员工可能没发奖金,员工奖金表没有对应数据,需要统计出结果每个部门下的员工数以及该部门下的已经发放奖金的员工数
结果的示例结构如下:
部门名称 部门员工数 以发奖金的员工数
研发部 22 15
产品部 17 12

请教怎么写好些,有条件的同学尽量先跑下正确,实在不方便再发伪代码,谢谢啦
...全文
137 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaping108 2017-02-16
  • 打赏
  • 举报
回复
Bingo,HOHOHO
rucypli 2017-02-16
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
语句:
--测试数据
with 部门表a (depid,depname)
as
(
select 1,'研发部'   union all 
SELECT 2,'产品部'
),部门员工表b(usersid,depid)AS(
select 1,1   union all 
select 2,2   union all 
select 3,1   union all 
select 4,1   union all 
select 5,2   
),员工奖金表c(upid,usersid,payment,type)AS(
select 1,1,100,1  union all 
select 2,2,300,2  union all 
select 5,5,800,1  
)
--测试数据结束
SELECT  a.depname AS 部门名称 ,
        COUNT(DISTINCT b.usersid) AS 部门员工数 ,
        COUNT(DISTINCT c.usersid) AS 以发奖金的员工数 
FROM    部门表a a
        INNER JOIN 部门员工表b b ON b.depid = a.depid
        LEFT JOIN 员工奖金表c c ON c.usersid = b.usersid
GROUP BY a.depname
结果:
二月十六 2017-02-15
  • 打赏
  • 举报
回复
语句:
--测试数据
with 部门表a (depid,depname)
as
(
select 1,'研发部' union all
SELECT 2,'产品部'
),部门员工表b(usersid,depid)AS(
select 1,1 union all
select 2,2 union all
select 3,1 union all
select 4,1 union all
select 5,2
),员工奖金表c(upid,usersid,payment,type)AS(
select 1,1,100,1 union all
select 2,2,300,2 union all
select 5,5,800,1
)
--测试数据结束
SELECT a.depname AS 部门名称 ,
COUNT(DISTINCT b.usersid) AS 部门员工数 ,
COUNT(DISTINCT c.usersid) AS 以发奖金的员工数
FROM 部门表a a
INNER JOIN 部门员工表b b ON b.depid = a.depid
LEFT JOIN 员工奖金表c c ON c.usersid = b.usersid
GROUP BY a.depname



结果:

56,867

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧