您的位置:首页 > 数据库

SQL扩展之T-SQL中的数据查询语言之统计计算

2015-09-24 19:20 495 查看
对于检索数据常常需要进行统计或计算,我们可以使用聚合函数进行统计或者计算。

1,聚合函数

聚合函数实现数据统计或计算,用于计算表中的数据,返回单个计算结果。除COUNT函数外,聚合函数忽略空值。 SQL Server 2008所提供常用的聚合函数:



语法格式:

( [ ALL | DISTINCT ] expression )
其中,ALL表示对所有值进行聚合函数运算,ALL为默认值,DISTINCT表示去除重复值,expression指定进行聚合函数运算的表达式。

举例,查询102课程的最高分、最低分、平均成绩:

USE stsc
   SELECT MAX(grade) AS '最高分',MIN(grade) AS '最低分',***G(grade) AS '平均成绩'
    FROM score
    WHERE cno='102‘
例如,求得学生总人数:

USE stsc
 SELECT COUNT(*) AS '总人数'
 FROM student
例如,查询计算机专业学生的总人数:

USE stsc
  SELECT COUNT(*) AS '总人数'
  FROM student
  WHERE specialist='计算机
2,GROUP BY

GROUP BY子句用于将查询结果表按某一列或多列值进行分组,其语法格式为如下:

[ GROUP BY [ ALL ] group_by_expression [,…n]
   [ WITH { CUBE | ROLLUP } ] ] 
其中,group_by_expression为分组表达式,通常包含字段名,ALL显示所有分组,WITH指定CUBE或ROLLUP操作符,在查询结果中增加汇总记录。

例如,查询各门课程的最高分、最低分、平均成绩:

USE stsc
SELECT cno AS '课程号', MAX(grade)AS '最高分',MIN (grade)AS '最低分', ***G(grade)AS '平均成绩'
FROM score
WHERE NOT grade IS null
GROUP BY cno
例如,求选修各门课程的平均成绩和选修人数:

USE stsc
   SELECT cno AS '课程号', ***G(grade) AS '平均成绩', COUNT(*) AS '选修人数'
   FROM score
   GROUP BY cno
3,H***ING 子句

H***ING子句用于对分组按指定条件进一步进行筛选,最后只输出满足指定条件的分组, H***ING子句的格式为:

[ H***ING <search_condition> ] 
其中,search_condition为查询条件,可以使用聚合函数。

当WHERE子句、GROUP BY子句、H***ING子句在一个SELECT语句中时,执行顺序如下:

(1)执行WHERE子句,在表中选择行。

(2)执行GROUP BY子句,对选取行进行分组。

(3)执行聚合函数。

(4)执行H***ING子句,筛选满足条件的分组。

例如,查询选修课程2门以上且成绩在80分以上的学生的学号:

USE stsc
SELECT stno AS '学号', COUNT(cno) AS '选修课程数'
FROM score
WHERE grade>=80
GROUP BY stno
H***ING COUNT(*)>=2
例如,查询至少有4名学生选修且以8开头的课程号和平均分数:

USE stsc
SELECT cno AS '课程号', ***G (grade) AS '平均分数'
FROM score
WHERE cno LIKE '8%'
GROUP BY cno
H***ING COUNT(*)>4
4,排序查询

SELECT语句的ORDER BY子句用于对查询结果按升序(默认或ASC)或降序(DESC)排列行,可按照一个或多个字段的值进行排序,ORDER BY子句的格式如下:

[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,…n ]
其中,order_by_expression是排序表达式,可以是列名、表达式或一个正整数。

例如,将计算机专业的学生按出生时间先后排序:

USE stsc
  SELECT *
  ROM student
  WHERE specialist='计算机'
  ORDER BY stbirthday
例如,将通信专业学生按“数字电路”课程成绩降序排序:

USE stsc
 SELECT a.stname, b.cname, c.grade 
 FROM student a, course b, score c
 WHERE a.stno=c.stno AND b.cno=c.cno AND b.cname='数字电路' AND a.specialist='通信'
ORDER BY c.grade DESC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: