2019-03-25
-- 建表
-- 新建一张表
create table 表名(
....
)
-- 子查询建表 只继承结构和数据 不继承约束
create table emp_copy
as
SELECT * from emp
CREATE table emp_copy1
AS
select empno,ename,sal from emp where deptno = 10
CREATE table emp_copy2
AS
select empno 工号,ename,sal from emp where deptno = 10
-- 建一张空表
create table emp_copy3
AS
SELECT * from emp where 1 = 0
-- 修改工作地点在new york 或chicago 的员工工资 工资增加500
update emp2
set sal = sal 500
where deptno in(SELECT deptno FROM dept where loc in('new york','chicago'))
-- 删除工作在new york 的员工记录
delete from emp2
where deptno in(SELECT deptno FROM dept where loc in('new york'))
-- 函数 函数名(参数)
-- 虚表 DUAL
-- abs 绝对值
select abs(sal)
from emp
-- round(x,y) 将x精确到小数点后y位 四舍五入
select round(99.567,2),round(99.567,1),round(99.567,0)
from DUAL
-- truncate(x,y) 截断
select truncate(99.567,2),truncate(99.567,1),truncate(99.567,0)
from DUAL
-- 字符串函数
-- substr(str,pos位置 从第几个,length)
select SUBSTR('helloworld',1,3)
from dual
-- 查询姓名以s开头的员工信息
SELECT ename
from emp
where substr(ename,1,1) = 's'
-- 查询姓名以s,j,m开头的员工信息
select ename
from emp
where substr(ename,1,1) in ('s','j','m')
-- 显示所有员工姓名的前三个字符
select ename,substr(ename,1,3)
FROM emp
-- 日期函数
-- mysql 5.6以后支持日期作为默认值
create table test7(
regtime datetime default now()
)
-- CURDATE()和CURRENT_DATE() :获取当前日期函数;CURRENT_TIME() 获取当前时间函数
-- now :返回服务器的当前日期和时间
select curdate(),current_date(),now()
from dual
-- DATE_FORMAT(date,format):格式化日期;
-- %Y 年份
-- %m(M) 月份(英文)
-- %d 日
-- %h 时
-- %i 分钟
-- %s 秒
select DATE_FORMAT(now(),'%Y-%m-%d %h:%i:%m')from dual
-- DATEDIFF(expr1, expr2):返回两个日期相减相差的天数;
select hiredate,DATEDIFF(curdate(),hiredate)
from emp
-- EXTRACT(unit FROM date):从日期中抽取出某个单独的部分或组合
select hiredate,
extract(year from hiredate),
extract(month from hiredate),
extract(day from hiredate),
extract(HOUR from now()),
extract(minute from now()),
extract(second from now())
from emp
select *
from emp
where extract(year from hiredate) = '1981'
-- 一般函数
-- substr(str,pos,len),
-- substr(str,pos)
-- round,`TRUNCATE`(X,D)
-- 查询部门10,20的员工截止到2000年1月1日,工作了多少个月,入职的月份
-- TIMESTAMPDIFF() 按照什么求差 日期1,日期2
select TIMESTAMPDIFF(month,hiredate,now()),
EXTRACT(month from hiredate),
DATE_FORMAT(hiredate,'%m')
from emp
where deptno in (10,20)
-- 流程控制函数
-- case ..when..then
-- decode
-- 查询员工姓名 工资 部门编号 部门名称
select ename,sal,deptno,(case deptno
when 10 then '开发部'
when 20 then '实施部'
when 30 then '测试部'
else '小卖部' end) dname
from emp
-- 计算2000年1月1日到现在有多少月,多少周(四舍五入)。
select TIMESTAMPDIFF(month,'2000-1-1',now()),TIMESTAMPDIFF(week,'2000-1-1',now())
from dual
-- 查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
SELECT *
from emp
where ename like '__A%'
-- 将员工工资按如下格式显示:123,234.00 RMB 。
select concat(sal,'RMB')
from emp
-- 查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
select ename,IFNULL(mgr,'No Manager') mgr
from emp
-- 将员工的参加工作日期按如下格式显示:月份/年份。
select DATE_FORMAT(hiredate,'%m/%Y')
from emp
-- 在员工表中查询出员工的工资,并计算应交税款:
-- 如果工资小于1000,税率为0,
-- 如果工资大于等于1000并小于2000,税率为10%,
-- 如果工资大于等于2000并小于3000,税率为15%,
-- 如果工资大于等于3000,税率为20%。
select sal,(case
when sal < 1000 then 0
when sal >=1000 and sal<2000 then sal*0.1
when sal >=2000 and sal<3000 then sal*0.15
else sal*0.2 end)tax
FROM emp
select sal,(case truncate(sal/1000,0)
when 0 then 0
when 1 then sal*0.1
when 2 then sal*0.15
else sal*0.2 end)tax
FROM emp
-- 问题
-- 查询语句 查询员工姓名 部门名称 工作地点
select ename,dname,loc
from emp,dept
-- 涉及的表示一张以上 两张表就会发生自动连接
-- 连接规则 :笛卡尔积 一张表的所有记录与另一张表记录全部匹配的情况
select ename,dname,loc
from emp,dept
where emp.deptno = dept.deptno
-- 注意 同名列需要加表名作为前缀
-- 涉及一张以上表 别落下条件 否则会出现笛卡尔积
-- 表名也可以起别名, 方便写前缀
-- 查询所有员工编号 姓名 部门编号 工作地点
select empno,ename,d.deptno,loc
from emp e,dept d
where e.deptno = d.deptno
-- 查询工作地点在 new york 的员工编号 姓名 部门编号 工作地点
select empno,ename,d.deptno,loc
from emp e,dept d
where e.deptno = d.deptno and loc = 'NEW YORK'
-- 1.写一个查询,显示所有员工姓名,部门编号,部门名称。
select ename,d.deptno,dname
from emp e,dept d
where e.deptno = d.deptno
select ename,d.deptno,dname
from emp e
join dept d
on e.deptno = d.deptno
-- where loc = 'chicago'
-- 2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
select ename,loc,comm
from emp e,dept d
where e.deptno = d.deptno and loc = 'CHICAGO' and comm is not null
-- 3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
select ename,loc
from emp e,dept d
where e.deptno = d.deptno and ename like '%A%'
-- 工资登记表
-- 1 0 600
-- 2 601 1500
-- 3 1501 2500
-- 4 2501 4000
-- 5 4001 10000
create table salgrade(
grade int auto_increment,
losal decimal(7,2) default 0,
hisal decimal(7,2) default 0,
primary key(id)
)
-- 查询员工姓名 工资 奖金 工资等级
select ename,sal,comm,grade,losal,hisal
from emp
join salgrade
on sal >= losal and sal<= hisal
select ename,sal,comm,grade,losal,hisal
from emp
join salgrade
on sal between losal and hisal
-- 查询员工姓名 工资 奖金 工资等级 部门名称 要求只显示工资等级2以上的信息
select ename,sal,comm,grade,dname
from emp e
join dept d
join salgrade
on e.deptno = d.deptno and sal BETWEEN losal and hisal
where grade >2
-- 自连接
-- 查询每个员工的姓名和直接上级姓名
select e.ename,m.ename
from emp e
join emp m
on e.mgr = m.empno
正态分布怎么画图-如何在word中画正态分布图
正态分布图怎么做?
正态分布这样的比较专业的图通常都是使用专业统计分析软件,比如Minitab,来做。但是,这些软件做出的图的颜值实在不敢恭维。而用Excel制作出来的图表,可以轻松进行图表的相关设置,美化那是相当简单的事情。如图所示效果。下面,波波411就来分享制作方法。此方法是直接制作一个画正态分布和正态曲线的模板,以后只要将新的样本数据替换,就可以随时做出正态分布图来,省时省力。
工具/原料
电脑
Excel2007版本及以上
计算均值,标准差及相关数据
1
假设有这样一组样本数据,存放于A列,首先我们计算出样本的中心值(均值)和标准差。
如下图,按图写公式计算。为了方便对照着写公式,我在显示“计算结果”旁边一列列出了使用的公式。
公式直接引用A列计算,这样可以保证不管A列有多少数据,全部可以参与计算。因为是做模板,所以这样就不会因为每次样本数据量变化而计算错误。
Excel在2007版本以后标准差函数有STDEV.S和STDEV.P。STDEV.S是样本标准偏差,STDEV.P是基于样本的总体标准偏差。如果你的Excel里没有STDEV.S函数,请使用STDEV函数。
2
正态分布直方图需要确定分组数,组距坐标上下限等。如下图写公式计算。
分组数先使用25,上下限与中心值距离(多少个sigma)先使用4。因为使用公式引用完成计算,所以这两个值是可以任意更改的。这里暂时先这样放
请点击输入图片描述
3
计算组坐标。“组”中填充1-100的序列。此处列了100个计算值。原因后面再解释。
在G2,G3分别填入1,2。选中G2,G3单元格,将鼠标放在右下角选中框的小黑方块上。当鼠标变成黑色十字时,下拉。直至数值增加至100。如下两图
请点击输入图片描述
4
如下图,H2输入公式=D9,H3单元格输入公式=H2 D$7。为了使公式中一直引用D7单元格,此处公式中使用了行绝对引用。
请点击输入图片描述
5
选中H3单元格,将鼠标放在右下角选中框的小黑方块上。当鼠标变成黑色十字时双击,填充H列余下单元格。
请点击输入图片描述
6
计算频数。如图所示,在I2,I3分别填写公式计算频数。同样,选中I3单元格,将鼠标放在右下角选中框的小黑方块上。当鼠标变成黑色十字时双击,填充I列余下单元格。
请点击输入图片描述
请点击输入图片描述
7
计算正态曲线函数值。如图在J2列输入公式。同样,选中J2单元格,将鼠标放在右下角选中框的小黑方块上。当鼠标变成黑色十字时双击,填充J列余下单元格。
请点击输入图片描述
END
建立名称,供正态图引用
1
建立名称。[公式]选项卡中点击[名称管理器],打开[名称管理器]对话框,点击[新建]打开[新建名称]对话框。[名称]里输入“频数”,[引用位置]里输入公式“=OFFSET(正态分布!$I$1,1,,正态分布!$D$6)”。然后点击[确定]。
注意,我的数据所在sheet的名称是“正态分布”。你的可能是“Sheet1”,“Sheet2”之类的名称。为了保证公式一致,建议双击工作表名称,然后修改成和我的一样的“正态分布”
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
同样建立名称“正态曲线”,[引用位置]里输入公式“=OFFSET(正态分布!$J$1,1,,正态分布!$D$6)”;建立名称“坐标”,[引用位置]里输入公式“=OFFSET(正态分布!$H$1,1,,正态分布!$D$6)”
请点击输入图片描述
END
画正态图
插入柱形图
请点击输入图片描述
选中刚插入的空白图形,在[图表工具]选项组中切换到[设计],点击[选择数据],打开[选择数据源]对话框。
请点击输入图片描述
点击[添加],打开[编辑数据系列]对话框,如图设置[系列名称]和[系列值]来添加“频数”系列。同样如图设置添加“正态曲线系列”
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
编辑坐标轴引用。[选择数据源]对话框中点击编辑打开[轴标签]对话框。如图设置引用。点击[确定]返回[选择数据源]对话框,点击[确定]。
请点击输入图片描述
请点击输入图片描述
确保柱形图处于选中状态,点击[图表工具]-[布局]。点击左上角[图表区]下拉列表,选择“系列“正态曲线””,然后点击[设置所选内容格式],打开[设置数据系列格式]对话框。选择[次坐标轴]。
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
[图表工具]选项组切换到[设计]选项卡。点击[更改图表类型],打开[更改图表类型]对话框。如图选择拆线图
请点击输入图片描述
请点击输入图片描述
柱形图中选中正态曲线,然后在[图表工具]选项组切换到[布局]选项卡。点击[设置所选内容格式],打开[设置数据系列格式]对话框。切换到[线型],选择[平滑线]。
请点击输入图片描述
请点击输入图片描述
至此,图形已经画完。如果只需要柱形分布图,不需要正态曲线,在柱形图中选中正态曲线,按键盘上的Delete键删除就行了。
有的专业作图软件中,柱形分布图中柱子是紧挨在一起的。要这样设置的话请在柱形图中选中柱子,然后[图表工具]选项组切换到[布局]选项卡。点击[设置所选内容格式],打开[设置数据系列格式]对话框。分类间距设为0%。切换到[边框颜色],然后选择[实线],颜色随便选一个,只要和柱子不是一个颜色就可以了。这里选择了黑色。
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
最后,试着修改下“组”和上下限与中心值距离的值,图表会自动更新。在第3步中,我们计算了100组的值,所以,只要此处的组不超过100,均可得到正确的图表。一般分组到100的情况极少,所以,第3步预留了100组的数据,以便在更改组时,总能等到正确的图表。当然,如果你原意,计算1000组也无所谓了。反正你已经学会方法了。
以后如果样本数据变更了,直接将A列数据换成新的样本数据,设置下需要的分组和上下限与中心值距离的值,正态分布图分分钟钟就出来啦。至于美化嘛,只要更改相关设置就可以了,比如开篇那张,当然,你可以把图表美化的更加漂亮,尽情发挥想象力吧。
请点击输入图片描述
如何画正态分布曲线正态分布应用最广泛的连续型概率分布。通常所说的正态分布曲线指的是正态分布的密度函数的图像。其特征是“钟”形曲线。
正态分布曲线一种概率分布。正态分布是具有两个参数μ和σ^2的连续型随机变量的分布,第一参数μ是遵从正态分布的随机变量的均值,第二个参数σ2是此随机变量的方差,所以正态分布记作N(μ,σ2)。遵从正态分布的随机变量的概率规律为取μ邻近的值的概率大,而取离μ越远的值的概率越小;σ越小,分布越集中在μ附近,σ越大,分布越分散。
正态分布的密度函数的特点是:
关于直线x=μ对称,在μ处达到最大值,在正(负)无穷远处取值为0,在μ±σ处有拐点;
它的形状是中间高两边低,图像是一条位于x轴上方的钟形曲线;
曲线与x轴围成的面积为1;
当μ=0,σ^2=1时,称为标准正态分布,记为N(0,1)。
正态分布曲线画法:
1、可通过计算机中Excel、matlab、几何画板、geogebra等软件来实现;
2、通过其特点,可以动手画出大致图形;
大致图像如下:
1、μ对图像的影响:
2、σ对图像的影响:
如何在word中画正态分布图在word中画正态分布图的方法如下(以windows10系统的word2019版为例):
1、打开文档,点击插入。
2、在随后打开的界面中点击“形状”。
3、在随后进入的页面中点击“任意多边形”。
4、任意绘制一个类似于正太分布的多边形,右键编辑顶点。
5、点击顶点右键,选择平滑顶点。
6、随后依次更改顶点的位置。
7、最终直到画出这样的图形即可。