资讯

展开

SQL-Server-入门查询

作者:快盘下载 人气:
聚合函数和分组的使用 聚合函数是按照一定的规则将多行数据汇总成一行的函数;MAX(),AVG()等等;对数据进行汇总前;还可以按照特定的列将数据进行分组 ;GROUP BY;;然后根据给定的条件进行筛选 ;HAVING;

 

简单的聚合函数 简单聚合函数是那些拥有很直观将多行汇总成一行计算规则的函数;简单聚合函数包括 AVG,MAX,MIN,SUM;这些函数的参数都为数字类型

 

COUNT() count()函数用来计算给定条件下所含有的行数

SELECT COUNT(*) FROM table / SELECT COUNT(colunm) FROM table

 

当COUNT(colunm)作用于特定的某一列时;NULL值是不会被计算在其中的。而COUNT(*)是计算了所有记录;包括NULL的数据 当我们只想计算不同数据的汇总;可以使用DISTINCT关键字来让每一列每个相同的值只有一个被计算在内
SELECT COUNT(DISTINCT column) FROM table

AVG(),SUM(),MAX(),MIN() 这几个函数除了功能不同;参数与用法几乎相同;所以这里只对AVG()进行解释 AVG()表示计算在选择范围内的汇总数据的平均值;NULL值不会被计算在内
SELECT AVG(colunm) FROM table 

如果在计算的时候我想要包含NULL值;并在当前查询中将NULL值用其他值来替代并参与汇总计算;使用ISNULL(column,value) 例如;我想获取每位员工的平均休息时长;如果没有休假时间;则按10个小时计算 (关系演算法)
SELECT  AVG( ISNULL(relaxTime,10) ) AS RelaxTime FROM table 

也可以使用DISTINCT关键字让简单聚合函数中每一个值唯一参与聚合汇总计算;可参考上面的COUNT()函数 关于SUM,MAX,MIN这些用法都一样就不做解释了

 

将聚合函数得到的值按照列进行分组 分组的概念为;使被分组的列唯一 SQL-Server-入门查询
SELECT name FROM test GROUP BY name 

得到以下结果     

 

为了更好的理解GROUP BY的过程;在初始表与结果表中间想象多一个虚拟表;用来表达GROUP BY的原理

SQL 

GROUP BY name 就是找到name那一列;使name唯一;即具有相同name值的行;合并为一行

需要注意的是;

1.查询SQL语句后面跟的值;必须是包含在聚合函数里面或跟在GROUP BY子句后面;不然会出现下面错误提示

SQL

原因为;假如执行了SELECT * FROM test GROUP BY name ,那么返回的结果应该是上面的虚拟表3;可是id和number单元格中的内容是多个值的;而SQL SERVER又是基于关系数据库的关系;一条记录是不允许拥有多值的;所以执行就会报错。

2.那么对于id和number单元格具有多个数据的情况怎么办?答案是用聚合函数;上面有关聚合函数的作用已经清晰的介绍了;就是将多行数据合并为一行的作用

SELECT name , SUM(number) FROM test GROUP BY name

3.GROUP BY多个列怎么理解呢?

SELECT name , SUM(id) FROM test GROUP BY name , number

结果如下;

SQL 

其过程为;

Server 

可以用以上的思想;取唯一的name值;再取唯一的number值;再通过聚合函数计算出id值。其实正统的逻辑思维为;根据每一列唯一的name值和每一列唯一的number值进行CROSS JOIN ;生成笛卡尔积表;再过滤掉在初始表中没有的记录;再根据聚合函数生成最终结果

对分组完成后d的数据集进行再次筛选

当分完组后可以对数据集进行再筛选;通过在GROUP BY后面添加HAVING子句;在某种意义上很像WHERE子句;HAVING子句后面不可以放SELECT查询的列别名。HAVING子句最强大的地方是可以是使用聚合函数作查询条件;比如;GROUP BY name HAVING COUNT(id)>1

 

 

 

加载全部内容

相关教程
猜你喜欢
用户评论
快盘暂不提供评论功能!