学习笔记
一.聚合
部分常用聚合函数
1.COUNT():统计指定列不为NULL的记录行数;
2.MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
3.MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
4.SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
5.AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0
6.STDEV([all | distinct ] expression):计算标准偏差值,这里的expression必须是一个数值表达式,不允许使用聚合函数和子查询。表达式的值是精确或近似数值类型,但不包括bit数据类型。将忽略null值。
7.VAR():计算方差
8注意:
①所有的聚合方式使用都是 函数名(字段) 对这一个字段进行聚合.
②有一个特列那就是count(*) 可以使用*号,也可以使用字段,通常我们使用count(1)来优化查询
③聚合函数如果遇到null值的话,就会跳过去,不计算
④一般在书写sql的是时候很多时候会误将聚合函数放到where后面9.作为条件查询,这样会出现错误,原因在于:
having放在group by 的后面;group by 后面只能放非聚合函数的列;where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组
10.大设计相关示例代码
Select
M.valid
,Max(m.price)
,min(m.price)
From tb_medicine as m
Group by m.valid
Having year(m.valid)between 2020 and 2018
二.分支
注意格式Case when...then...
when...then...
...end
大设计药品表(tb_medicine)中有一列为分类(sort)数据类型定义为bit ,当值为1则是中药,0则是西药
SELECT
m.No
,m.Name
,CASE m.sort
WHEN 1 THEN '中药'
WHEN 0 THEN '西药'
END AS sort
FROM
Tb_medicine AS m;
三.格式化
这一部分学习对空值的处理,常涉及强制类型转换convert函数的使用
大设计中一项查询功能为 :查询药品管理员的联系方式,若为空值则显示尚无联系方式
Select
P.name
,rtrim(isnull(p.tel,’’) )as tel
From tb_people as p
四.日期
常用日期方法有
1.DATEDIFF 返回跨两个指定日期的日期边界数和时间边界数
(常根据生日计算年龄)
大设计中查询药品出入库时间差
Select
datediff(day,i.date,o.date)
From tb_in as i
Join tb_out as o on i.MNO=o.MNO
DATENAME 返回表示指定日期的指定日期部分的字符串
Select
Datename(year,i.date)as 入库年份
,datename(week,i.date)as 周
From tb_in as i
2.DATEPART 返回表示指定日期的指定日期部分的整数。
3.DATEADD 返回给指定日期加上一个时间间隔后的新值
查询药品的有效期
Select
Dateadd(year,2,m.date)
From tb_medicine as m
4.GETDATE以标准内部格式返回当前系统日期和时间
5.DAY 指定某天的’日’部分
MONTH 指定某天的’月’部分
YEAR指定某天的’年’部分