sql语句查询部门最大业绩-最小业绩-业绩占比

前言

前两天遇到写sql语句的问题。想了很久,没有解决出来。然后,请教大佬。解决了。。。好吧,话不多说,开始解决吧

准备数据库

CREATE DATABASE /*!32312 IF NOT EXISTS*/`school` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `school`;
/*Table structure for table `deptkpi` */

DROP TABLE IF EXISTS `deptkpi`;

CREATE TABLE `deptkpi` (
  `MonthName` varchar(50) NOT NULL,
  `DeptName` varchar(50) NOT NULL,
  `KPIValue` int(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `deptkpi` */

insert  into `deptkpi`(`MonthName`,`DeptName`,`KPIValue`) values ('一月','市场部',8000),('二月','信息中心',1500),('一月','信息中心',1000),('二月','市场部',8765),('三月','市场部',90555),('三月','信息中心',800),('四月','市场部',86890),('四月','信息中心',1113),('五月','市场部',78990),('五月','信息中心',3211),('六月','市场部',99999),('六月','信息中心',40000);

在navicat上执行完后就是这样:

在这里插入图片描述

看题目要求

在这里插入图片描述

  • 我们通过这一张表查询出这两个部门的最大业绩,最大业绩月份,最小业绩月份,总业绩占比
    • 将这个条件分成几个部分查询出来,然后,根据关联关系合并数据

开始动手

  • 先查询出 部门的最大业绩及最大业绩月份

     SELECT deptName,KPIValue '最大业绩kpi',MONTHNAME '最大业绩月份' FROM deptkpi WHERE KPIValue IN (SELECT MAX(KPIValue) FROM deptkpi GROUP BY DeptName)
    
  • 查询出部门的最小业绩,最小业绩月份

     SELECT deptName,KPIValue '最小业绩kpi',MONTHNAME '最小业绩月份' FROM deptkpi WHERE KPIValue IN (SELECT MIN(KPIValue) FROM deptkpi GROUP BY DeptName)
    
  • 查询各个部门占总的比例

    SELECT deptName,SUM(KPIValue)/(SELECT SUM(KPIValue) FROM deptkpi) AS '总业绩占比' FROM deptkpi GROUP BY deptName
    
  • 这样就出来三条sql语句,他们的关系都有 deptName这一列,所以,我们这里使用内连接的方法组合

    SELECT l.*,s.最小业绩kpi,s.最小业绩月份,z.总业绩占比 FROM   
    (
     SELECT deptName,KPIValue '最大业绩kpi',MONTHNAME '最大业绩月份' FROM deptkpi WHERE KPIValue IN (SELECT MAX(KPIValue) FROM deptkpi GROUP BY DeptName)
    ) l
    INNER JOIN (
     SELECT deptName,KPIValue '最小业绩kpi',MONTHNAME '最小业绩月份' FROM deptkpi WHERE KPIValue IN (SELECT MIN(KPIValue) FROM deptkpi GROUP BY DeptName)
    ) s ON l.deptName = s.deptName 
    INNER JOIN (
     SELECT deptName,SUM(KPIValue)/(SELECT SUM(KPIValue) FROM deptkpi) AS '总业绩占比' FROM deptkpi GROUP BY deptName
    ) z ON s.deptName = z.deptName
    

    运行结果如下图:

    在这里插入图片描述
    我的问题是出在查询的字段中还可以写查询语句。这点我不清楚,所以最后没有做出来。百度的话,那些sql更加看不懂。

如果有更好的方法,欢迎指正!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值