常见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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Navicat Premium 中文版注册码

    Navicat Premium 中文版注册码NAVN-U6QE-6PX7-44K5NAVI-WVK6-ZYW4-LQYUNAVJ-5DOO-FCAA-PHMZ经测试,Nacicat版本是10.0.11(黄色版本)可以使用第一个注册码关注我的技术公众号,每天都有优质技术文章推送。微信扫一扫下方二维码即可关注:…

    2022年9月25日
    2
  • 非常全的VsCode快捷键「建议收藏」

    非常全的VsCode快捷键「建议收藏」按Press功能FunctionCtrl+Shift+P,F1显示命令面板ShowCommandPaletteCtrl+P快速打开QuickOpenCtrl+Shift+N新窗口/实例Newwindow/instanceCtrl+Shift+W

    2022年6月12日
    46
  • gradle command not found

    gradle command not found

    2021年9月14日
    86
  • 如何制作bom表_如何制作bom表

    如何制作bom表_如何制作bom表(全路径Excel软件视频教程都可领取会员后免费学习)点我领会员免费学Excel全套基础入门教程!一、Excel软件入门MicrosoftExcel是Microsoft为使用Windows和AppleMacintosh操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。第一章软件入门介绍第1课软件…

    2022年8月29日
    5
  • 某天擎取消密码_360天擎默认密码

    某天擎取消密码_360天擎默认密码1.出于公司原因,很多会要求下载某信天擎,但是退出或者卸载的时候总会让你输入密码,这种流氓行为是可耻的,以下是取消密码的方式:注:本人电脑win11系统win10尝试杀掉后台进程在修改:进程名如图(个数未必和我相同全部杀掉即可)本次选择的方式为修改本地文件(1)找到文件路径如图所示:(如果忘记软件安装路径请看文章最后附有查看方式)(2)打开文件:拉到最底部等号后边全部删除删除后:查看安装路径的方式1.选中快捷方式单击右键选择属性(选中位置就是安装路径..

    2025年12月2日
    6
  • Matlab矩阵基本操作(定义,运算)

    一、矩阵的表示在MATLAB中创建矩阵有以下规则:a、矩阵元素必须在”[]”内;b、矩阵的同行元素之间用空格(或”,”)隔开;c、矩阵的行与行之间用”;”(或回车符)隔开;d、矩阵的元素可以是数值、变量、表达式或函数;e、矩阵的尺寸不必预先定义。二,矩阵的创建:1、直接输入法最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入

    2022年4月16日
    453

发表回复

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

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