怎么用sql语句来实现分组求和

一单词解释(2分/个) 34分

二编写SQL语句(5分/题) 50分(包含笔试题问题和解答答案)

1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话

2) 修改学生表的结构,添加一列信息,学历

3) 修改学生表的结构,删除一列信息,家庭住址

4) 向学生表添加如下信息:

学号姓名年龄性别联系电话学历

5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”

6) 删除学生表的数据,姓名以C开头,性别为…男?的记录删除

7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来

8) 查询学生表的数据,查询所有信息,列出前25%的记录

9) 查询出所有学生的姓名,性别,年龄降序排列

10) 按照性别分组查询所有的平均年龄

三填空(3分/题) 36分(包含笔试题问题和解答答案)

1) 索引分为__聚集索引___和__非聚集索引__在一张表上最多可以创建1个聚集索引_索引。但是可以创建_249个非聚集索引索引。

2) 系统存储过程_sp-helptext__是用来显示规则,默认值,未加密的存储过程,用户定义函数,触发或视图的文本

}

b) SQL 是最重要的关系数据库操作语言,是所有关系数据库管理系统的标准语言.

c) SQL 语言是非过程化的语言, 只需要告诉做什么, 不需要关注怎么做, 简单.

b) 操作数据库对象(用户, 表格, 序列, 索引...)

c) 操作用户权限和角色的授予跟取消

select子句用于指定查询表格中的列信息

a)查询 emp 表格的所有数据

a) 查询所有员工的编号, 姓名和职位
 
a) 查询所有员工的姓名, 职位和年薪
 

b)as 关键字可以被省略, 一般都省略

c)别名中, 尽量不要使用特殊符号, 例如空格; 如果非要有特殊符号, 可以使用双引号括起来.

三、distinct子句和字符串连接符

a)查询所有的职位信息

b)查询所有员工的姓名和职位

Oracle 中, 用单引号表示字符串

a) 查询所有员工的姓名, 职位和薪资, 以姓名:xxx, 职位:xxx, 薪资:xxx 的形式显示

用于进行排序, 永远写在语句的最后

a)查询所有员工的信息, 按照工资升序排序

默认情况下, 按照升序排序, 所以, asc 一般被省略

b)查询所有员工的信息, 按照标号降序排序

c)查询所有员工的信息, 按照入职日期降序排序

d)查询所有员工的信息, 按照姓名排序

e)查询所有员工信息, 按照薪资降序排序, 如果薪资相同,将新员工排在前面.

f)查询所有员工的姓名和年薪, 按照年薪排序

四、where子句(等值条件和非等值条件)

1. where 子句:用于进行条件过滤

a) 查询 10 部门所有员工的信息

字符串必须加单引号, 而且大小写敏感

c) 查询在 入职的员工信息

> 日期必须用单引号括起来;

c) 查询所有员工的信息, 排除 20 部门

五、where子句(模糊查询)

使用 like(像)实现, 配合通配符实现

_, 表示任意一个字符

%, 表示任意个任意字符

a)查询姓名首字母为 A 的员工的信息

b)查询姓名第二个字母是 A 的员工的信息

c)查询姓名中带有字母 C 的员工的信息

d)查询姓名中带有下划线的员工的信息

a) 查询所有没有提成的员工信息

b) 查询所有有提成的员工信息

and 的优先级高于 or 的优先级

查询所有员工的姓名, 分别显示小写, 大写和首字母大写

在 Oracle 中, 提供了一个虚拟表格, 叫 dual, 专门用于进行测试, 可以从 daul 中查询任何数据

a) 查询所有员工的姓名及姓名的长度

b) 查询所有姓名长度为 5 的员工的信息

a) 查询所有员工的姓名, 将 A 替换为 a

a) 查询所有员工的姓名, 并显示姓名的前 3 个字母

b) 查询所有员工的姓名, 并显示姓名的后 3 个字母

第三个参数可以省略, 表示一直截取到末尾, 所以可以简写为:

第二个参数可以是负数, 表示倒着截取, 又可以简写为:

第二个参数可以控制四舍五入的位数, 正数表示小数点后, 负数表示小数点前.

a) 查询所有员工的入职的月数

3.4 last_day 计算给定日期所在月份的最后一天是哪个日期

基于给定日期计算下个给定的星期几是什么日期

用于在不同数据类型间进行转换. 数值类型, 字符串类型, 日期类型

5.1 nvl 用来处理空值, 如果某个字段为空, 则使用对应的数据进行替换

注意: 两者的数据类型必须一致

查询所有员工的姓名, 工资, 提成和总工资(工资+提成)

5.2 nvl2 有三个参数, 如果第一个参数不为空, 则使用第二个参数, 如果为空,则使用第三个参数

查询所有的职位, 并显示对应的中文描述

6. 分组函数(聚组函数)

注意: 出现在 SELECT 子句中的字段,如果不是包含在多行函数中,那么该字段必须同时在 GROUP BY 子句中出现。

a) 统计每个部门的编号, 最高工资和最低工资

a) 查询每个部门的人数和平均工资, 排除 10 部门

> where 子句中不允许使用分组函数, 用于分组前过滤

a) 查询每个部门的总工资和平均工资, 排除平均工资低于1600 的部门

a)在 emp 表中,列出工资最小值小于 2000 的职位

b)列出平均工资大于 1200 元的部门和工作搭配组合

九. 数据操纵语言(DML)

1.1 复制一个测试表格

b) 赋值 emp 表格的表结构, 不复制数据

a)当表格的每一列都要插入数据时, 可以省略列名不写. 需要保证值的顺序和列的顺序一致.

b)向表格插入一行数据, 只有编号和姓名

b) 删除编号为 1234 的员工信息

十、SQL99内连接、外连接和自连接

交叉连接会产生一个笛卡尔积

在笛卡尔积中, 有很多数据是无意义的, 所以需要消除, 可以通过 where 子句来消除

可以在查询时, 给表格起别名

natural join 用于针对多张表的同名字段进行等值连接

a)在自然连接时, 自动进行所有同名列的等值连接, 不需要写连接的条件

b)同名列只显示一列, 而且在使用时, 不能加表前缀

查询所有员工的姓名, 部门编号和部门名称

用来指定进行等值连接的同名字段, 针对自然连接提供的.同名字段依然不能使用表前缀.

a)查询 20 部门员工的姓名, 工资, 部门编号和部门名称

on 子句可以被用来指定连接的条件. 用于将过滤条件和关联条件分开.

a)查询所有员工的姓名, 工资和工资等级

b)查询 30 部门员工的编号, 姓名, 部门名称和所在地

c)查询所有员工的姓名, 部门名称, 工资及工资等级

N 张表连接, 至少需要 N-1 个连接条件

外连接除了能显示满足连接条件的数据以外, 还用于显示不满足连接条件的数据

left [outer] join, 表示左外连接, 可以显示左表中不满足连接条件的数据
 
right [outer] join, 表示右外连接, 可以显示右表中不满足连接条件的数据
 

自连接是发生在同一个表格中的连接

a)查询所有员工的编号, 姓名和领导的编号及姓名

b)查询所有员工的编号, 姓名和领导的编号及姓名, 并显示没有领导的员工信息

}

1.本实例其实可以用一句简单的sql去实现  由于我们项目数据库中时间存的是13位的时间戳    所以必须得转行成日期格式  才能进行分组   如下:

以上的就能实现多字段求和统计等功能  但我们老大考虑到查询速度和换库等问题    建议我不要用FROM_UNIXTIME()函数,所以只能用最笨的方法一步步实现   以下是用Java8方式实现的  代码如下:

//根据部门 日期进行分组 统计 //根据部门 日期进行分组 求和 //根据年份进行模糊匹配 取出对应的统计值 //将年份-去掉 组成新的数字 主要作为排序 //根据年份进行模糊匹配 取出对应的求和值 //将年份-去掉 组成新的数字 主要作为排序 //将统计和求和组合成一个新的集合返回前端 //查询上半年 取前六条数据 //查询下半年 后六条数据
}

我要回帖

更多关于 sql对多个条件进行分组求和 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信