9周学习笔记

学习笔记

一.聚合

部分常用聚合函数

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(*) 可以使用*,也可以使用字段,通常我们使用count1)来优化查询

聚合函数如果遇到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

datediffdayi.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指定某天的’年’部分

 

posted @ 2017-11-06 23:26  哗啦啦啦啦  阅读(194)  评论(0编辑  收藏  举报