还是求助一个SQL的编写问题

jiaping108 2017-02-14 07:43:55
部门表a{
depid;
depname
}
部门员工表b{
usersid;
depid;
}
员工工资表c{
upid;
usersid;
payment;
type: 1是人民币,2是美元
}
查询结果:
部门名称(depname) 部门员工数(count(usersid) group by depid) 部门工资总额(sum(payment)人民币) 部门工资总额(sum(payment)美元)
三张表,员工工资有人民币和美元两种,需要统计出结果每个部门下的员工数以及该部门下的员工总工资(人民币和美元要分开)
结果的示例结构如下:
部门名称 部门员工数 部门RMB工资总额 部门美元工资总额
研发部 22 100000 1500000
产品部 17 370000 3221000

请教怎么写好些,有条件的同学尽量先跑下正确,实在不方便再发伪代码,谢谢啦
...全文
117 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaping108 2017-02-15
  • 打赏
  • 举报
回复
对的,left join工资表就OK了,先结贴了,还有个新问题,还是这三张表的,再发一帖
二月十六 2017-02-15
  • 打赏
  • 举报
回复
引用 3楼我是你的主体 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:] 没mysql环境,用的mssql,应该差不多:
--测试数据
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 3,3,500,2  union all 
select 4,4,600,1  union all 
select 5,5,800,1  
)
--测试数据结束
SELECT  a.depname AS 部门名称 ,
        COUNT(DISTINCT b.usersid) AS 部门员工数 ,
        SUM(CASE WHEN c.type = 1 THEN c.payment
                 ELSE 0
            END) AS 部门RMB工资总额 ,
        SUM(CASE WHEN c.type = 2 THEN c.payment
                 ELSE 0
            END) AS 部门美元工资总额
FROM    部门表a a
        INNER JOIN 部门员工表b b ON b.depid = a.depid
        INNER JOIN 员工工资表c c ON c.usersid = b.usersid
GROUP BY a.depname
结果:
统计部门员工数统计有些问题,如果员工在工资表里没有记录的话会统计不到这个员工[/quote]那就left join 员工工资表
jiaping108 2017-02-15
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
没mysql环境,用的mssql,应该差不多:
--测试数据
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 3,3,500,2  union all 
select 4,4,600,1  union all 
select 5,5,800,1  
)
--测试数据结束
SELECT  a.depname AS 部门名称 ,
        COUNT(DISTINCT b.usersid) AS 部门员工数 ,
        SUM(CASE WHEN c.type = 1 THEN c.payment
                 ELSE 0
            END) AS 部门RMB工资总额 ,
        SUM(CASE WHEN c.type = 2 THEN c.payment
                 ELSE 0
            END) AS 部门美元工资总额
FROM    部门表a a
        INNER JOIN 部门员工表b b ON b.depid = a.depid
        INNER JOIN 员工工资表c c ON c.usersid = b.usersid
GROUP BY a.depname
结果:
统计部门员工数统计有些问题,如果员工在工资表里没有记录的话会统计不到这个员工
jiaping108 2017-02-14
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
没mysql环境,用的mssql,应该差不多:
--测试数据
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 3,3,500,2  union all 
select 4,4,600,1  union all 
select 5,5,800,1  
)
--测试数据结束
SELECT  a.depname AS 部门名称 ,
        COUNT(DISTINCT b.usersid) AS 部门员工数 ,
        SUM(CASE WHEN c.type = 1 THEN c.payment
                 ELSE 0
            END) AS 部门RMB工资总额 ,
        SUM(CASE WHEN c.type = 2 THEN c.payment
                 ELSE 0
            END) AS 部门美元工资总额
FROM    部门表a a
        INNER JOIN 部门员工表b b ON b.depid = a.depid
        INNER JOIN 员工工资表c c ON c.usersid = b.usersid
GROUP BY a.depname
结果:
目测是对的,谢谢啦,明天早上到单位试下在结贴,3Q
二月十六 2017-02-14
  • 打赏
  • 举报
回复
没mysql环境,用的mssql,应该差不多:
--测试数据
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 3,3,500,2 union all
select 4,4,600,1 union all
select 5,5,800,1
)
--测试数据结束
SELECT a.depname AS 部门名称 ,
COUNT(DISTINCT b.usersid) AS 部门员工数 ,
SUM(CASE WHEN c.type = 1 THEN c.payment
ELSE 0
END) AS 部门RMB工资总额 ,
SUM(CASE WHEN c.type = 2 THEN c.payment
ELSE 0
END) AS 部门美元工资总额
FROM 部门表a a
INNER JOIN 部门员工表b b ON b.depid = a.depid
INNER JOIN 员工工资表c c ON c.usersid = b.usersid
GROUP BY a.depname

结果:

56,678

社区成员

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

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