常见SQL面试题_sql索引面试题

常见SQL面试题_sql索引面试题之前面试遇到一个sql题。当时没写出sql语句,把题目记下。现在分享给大家(知识贵在精,学会举一反三)。这里采用的是mysql.sql语句如下。DROPTABLEIFEXISTS`depart_month`;CREATETABLE`depart_month`(`id`int(11)NOTNULLAUTO_INCREMENT,//id自增长`depa…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

之前面试遇到一个sql题。当时没写出sql语句,把题目记下。现在分享给大家(知识贵在精,学会举一反三)。

常见SQL面试题_sql索引面试题

这里采用的是mysql.sql语句如下。

DROP TABLE IF EXISTS `depart_month`;
CREATE TABLE `depart_month` (
  `id` int(11) NOT NULL AUTO_INCREMENT,//id自增长
  `depart` int(11) DEFAULT NULL, //部门id
  `achive` decimal(10,0) DEFAULT NULL,//业绩
  `status` int(11) DEFAULT NULL,//状态 此处不需要。
  `month` varchar(59) DEFAULT NULL,//月份
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;


//记录
INSERT INTO `depart_month` VALUES ('1', '1', '10', '1', '一月');
INSERT INTO `depart_month` VALUES ('2', '2', '10', '1', '一月');
INSERT INTO `depart_month` VALUES ('3', '3', '5', '1', '一月');
INSERT INTO `depart_month` VALUES ('4', '2', '8', '1', '二月');
INSERT INTO `depart_month` VALUES ('5', '4', '9', '1', '二月');
INSERT INTO `depart_month` VALUES ('6', '3', '8', '1', '三月');

其实第二个table只是用来显示对应部门的名字。在此题中没有作用(因为结果没有显示部门名称,直接显示的是id).

 

当时我的想法是,肯定是要group by ‘部门’,并且业绩应该是要sum(yj)求和的。但如何显示一月,二月,三月,想了很久后就决定放弃了。

现在来想,当时的想法是对的,只是如何来解决显示一月,二月,三月的问题。

其实我们可以将一月,二月,三月分开。先查看部门和一月的数据,然后用部门来关联二月的数据,三月的数据。最后汇总即可。

一:首先查看部门和一月数据.

SELECT t.depart AS '部门',t1.one AS '一月'
FROM (SELECT depart FROM depart_month GROUP BY depart) t
LEFT JOIN (SELECT depart,sum(achive) AS 'one' FROM depart_month WHERE MONTH = '一月'
GROUP BY depart) t1 ON t.depart = t1.depart

效果如下

常见SQL面试题_sql索引面试题

二:上面的数据然后加上二月的数据

SELECT t.depart AS '部门',t1.one AS '一月',t2.two AS '二月'
FROM ( SELECT depart FROM depart_month GROUP BY depart) t
LEFT JOIN (SELECT depart,sum(achive) AS 'one' FROM depart_month
WHERE MONTH = '一月' GROUP BY depart) t1 ON t.depart = t1.depart
LEFT JOIN (SELECT depart,sum(achive) AS 'two' FROM depart_month
WHERE MONTH = '二月' GROUP BY depart) t2 ON t.depart = t2.depart

效果如下:常见SQL面试题_sql索引面试题

三:最后关联三月的数据。

SELECT t.depart AS '部门',t1.one AS '一月',t2.two AS '二月',t3.three AS '三月'
FROM ( SELECT depart FROM depart_month GROUP BY depart) t LEFT JOIN (
SELECT depart,sum(achive) AS 'one' FROM depart_month WHERE MONTH = '一月' GROUP BY
depart) t1 ON t.depart = t1.depart LEFT JOIN ( SELECT depart,sum(achive) AS 'two'
FROM depart_month WHERE MONTH = '二月' GROUP BY depart) t2 ON t.depart = t2.depart
LEFT JOIN (SELECT depart,sum(achive) AS 'three' FROM depart_month WHERE MONTH = '三月'
GROUP BY depart ) t3 ON t.depart = t3.depart ORDER BY t.depart 

效果:

常见SQL面试题_sql索引面试题

 

总结:我个人觉得难点是处理月份上,如果分开就好多了。我觉得应该还有更好更简单的sql.如果有,欢迎来提建议。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/174789.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • django3.0异步_定时任务框架

    django3.0异步_定时任务框架celery介绍Celery是由Python开发、简单、灵活、可靠的分布式任务队列,是一个处理异步任务的框架,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。Celery侧重

    2022年7月31日
    8
  • Readprocessmemory使用方法

    Readprocessmemory使用方法函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有訪问权限。函数原型:BOOLReadProcessMemory(HANDLEhProcess,LPCVOIDlpBaseAddre

    2022年7月3日
    34
  • 项目范围管理「建议收藏」

    项目范围管理「建议收藏」1、项目范围管理要做好以下三方面工作:1)明确项目边界2)对项目执行工作进行监控3)防止项目范围发生蔓延2、项目的范围基准是经过批准的项目范围说明书、WBS和WBS字典。判断项目是否完成要以范

    2022年8月2日
    6
  • visual studio code适合什么语言_将当前运行的配置备份成初始配置

    visual studio code适合什么语言_将当前运行的配置备份成初始配置VSCode是一款非常好用的编辑器(或者IDE),具有很好的可扩展性,功能比较强大,占用的系统资源也适中,启动速度较快,而且支持全平台,比较适合作为Python开发用的IDE。本文针对Linux(主要是Ubuntu,其他发行版类似),整合一些Python开发相关的配置,仅供刚入坑Linuxer参考。一、VSCode与其他编辑器(或IDE)的比较(1)VSCode与Atom的比较:Atom是一款由g…

    2022年8月25日
    6
  • Django(23)Django限制请求装饰器

    Django(23)Django限制请求装饰器前言有时候,我们想要限制访问的请求方法,比如我们希望用户只能通过get方式请求,post不允许,那么我们可以采用装饰器的方式,django已经为我们提供了内置的装饰器限制请求装饰器Django内

    2022年7月28日
    15
  • ubuntu安装opencv的正确方法

    ubuntu安装opencv的正确方法本文介绍的是如何安装ubuntu下C++接口的opencv1.安装准备:1.1安装cmakesudoapt-getinstallcmake1.2依赖环境sudoapt-getinstallbuild-essentiallibgtk2.0-devlibavcodec-devlibavformat-devlibjpeg-devlibswscale-devlib…

    2022年6月18日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号