SQL课堂笔记--聚合函数

2017.11.13

聚合函数:
 COUNT(*)统计表中元组个数
 COUNT(属性名)统计一列中列值的个数 //不统计空值
 SUM计算一列值的总和(此列必须是数值行)
 AVG计算一列的平均值(此列必须是数值行)
 MAX求一列值中的最大值
 MIN求一列值中的最小值
    元组:每一条数据
 
 例1.求计算机专业学生的平均年龄:
  select avg(sage) as 平均年龄 from student where sdept=‘计算机‘
 
 例2.统计学校共开设课多少们课程:
  select count(*) from course
  select count(cno) from course

例3.统计交了学费的学生人数:
  select count(*) from course --统计所有的记录:交了的没交的都被统计了
  select count(fees) from course  --统计交了的学生个数,没交的不统计

例4:如何去掉重复的项目再统计:
  如:查询选修了课程的学生人数
   select count(distinct sno) from sc
    注:用distinct以避免重复计算学生人数
     (在access中不能用这种结构,在SQL server2008中可以)

ex:查询选修课成绩最高分,最低分和平均分,(查询的列注意重命名为:最高分,最低分,平均分,
    结果存放在新表abc中)
  select MAX(grade) as 最高分 ,MIN (grade)最低分,AVG(grade) as 平均分 into abc from sc
 
order by 子句:

例5:将课程按学分升序排序:
  select * from course order by credit
  select * from course order by ccredit desc(降序)

例6:查询选修了2课程的学生的学号和成绩,查询结果按成绩降序排序:
  select cno, sno,grade from sc where cno=2 order by grade desc
 
 例7:查询电子,计算机专业学生的姓名,专业名,结果按专业名升序,姓名降序排序:
  order by后面可以跟多个字段进行排序:
       用A1代表第一个字段,A2代表第二个字段
   1.order by A1,A2 desc    --A1升序,A2降序
   2.order by A1 asc,A2 desc     --A1升序,A2降序   asc可省略
   3.order by A1 desc,A2 desc    --A1,A2降序
  select sname AS 姓名,sdept AS 系名 from student where sdept in(‘电子‘,‘计算机‘) order by sdept,sname desc
  
group by 子句(分组之后进行统计):

例8:查询各门课程的选修人数:
  select cno,count(*) from sc group by cno

例9:统计男女生各有多少人:
  select ssex,count(ssex) as 人数 from student group by ssex
 
 例10:求学生的总分:
  select sno,sum(grade) as 总分 from sc group by sno

having 子句(已经分组后的元组,并不针对整张表,一般接到group by后使用):

例11:求选课在2门以上的学生,并统计平均成绩:
  select sno, avg(grade) as average from sc group by sno having count(*)>=2
  
 例12:求选课在2门以上并且成绩及格的学生,并统计平均成绩:
  select sno,avg(grade) as average from sc where grade>=60 group by sno having count(*)>=2  --这是错误的写法
  select sno,avg(grade) as average from sc group by sno having count(*)>=2 and min(grade)>=60 --对的

----所用的表是博客文件"student表"

练习:

-- 一、在商场销售数据库“Customer”中书写SQL代码进行查询:
use Customer
go

--1、查询顾客姓名以及联系方式。
select 姓名,联系方式 from 顾客

--2、查询所有商品类别(结果中不能有重复的商品类别)。
select distinct 商品类别 from 商品

--3、查询单价在100到200之间的商品名。
select 商品名 from 商品 where 单价>100 and 单价<200

--4、查询单价在300以上的鞋类的商品名。
select 商品名 from 商品 where 商品类别=‘鞋子‘ and 单价>300

--5、查询购买了C101,D201或E301商品号的顾客号(结果中顾客号不能有重复)。
select distinct 顾客号 from 购买 where 商品号 in(‘C101‘,‘D201‘,‘E301‘)

--6、查询姓王的的顾客姓名和联系方式。
select 姓名,联系方式 from 顾客 where 姓名 like ‘王%‘

--7、查询除姓刘的以外的顾客姓名和联系方式。
select 姓名,联系方式 from 顾客 where 姓名 not like ‘刘%‘

--二.在students数据库中(已给出)用SQL查询完成下面查询:(书写sql语句)
use students
go
--1、查询考试成绩有不及格学生的学号。
select sno from sc where grade<60

--2、将课程按学分升序排序。
select * from course order by ccredit

--3、查询2号课程的成绩在前3名学生的学号 。
select top 3 sno from sc  where cno=2  order by grade desc

--4、查询各门课程的选修人数。
select cno,count(*)as 人数 from sc group by cno

--5、统计男女生各有多少人。
select ssex,count(ssex) as 人数 from student group by ssex

--6、求各学生的总分。
select sno,sum(grade) as 总分 from sc group by sno

--7、求选课在2门以上并且成绩及格的学生,并统计平均成绩。
select sno,avg(grade) as average from sc group by sno having count(*)>=2 and min(grade)>=60

--8、查询选修了2课程的学生的学号、课程号和成绩,查询结果按成绩降序排序。
select sno,cno,grade from sc where cno=2 order by grade desc

--9、查询专业人数少于2人的专业名称及人数。
select sdept,COUNT(*) as 人数 from student group by sdept having COUNT(sdept)<2

--10、查询女学生的姓名、专业名,结果按姓名升序排序,专业名降序。
select sname AS 姓名,sdept as 专业名 from student where ssex in(‘女‘)order by sname,sdept desc

时间: 2024-10-08 16:41:16

SQL课堂笔记--聚合函数的相关文章

SQL课堂笔记

--注释 公司里一般而是用绝不重复的guid()做主键(web项目不常用) 如null参与运算,结果都是null 在数据库中创建索引能提高查询效率,)只在经常要检索的字段创建索引) sql查询null的数据 selsct * from table where name is null 查询年龄介于20到30的数据 selsct * from table where age between 20 and 30 查询年龄是20,22,32,46的数据 selsct * from table wher

SQL Server 自定义聚合函数

说明:本文依据网络转载整理而成,因为时间关系,其中原理暂时并未深入研究,只是整理备份留个记录而已. 目标:在SQL Server中自定义聚合函数,在Group BY语句中 ,不是单纯的SUM和MAX等运算,可以加入拼接字符串. 环境: 1:Sqlserver 2008 R2 2:Visual Studio 2013 第一部分: .net代码: using System; using System.Data; using Microsoft.SqlServer.Server; using Syst

【SQL】CLR聚合函数什么鬼

之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下. 一.杂项 CLR聚合函数在SQL中虽然是函数,但在C#中实际上是以一个类或结构的形式存在的(是的,实现聚合函数的实体可以是结构,也可以是类),这点有别于CLR普通函数,后者是类中的一个方法,鉴于此,下文把实现聚合函数的类或结构统称为聚合类,以免读者思维混淆 聚合类必须用特性[SqlUserDefinedAgg

SQL课堂笔记--嵌套查询

2017.11.15六:嵌套查询 嵌套查询概述:  一个select-from-where 语句称为一个查询块  将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询   例1:查询选修了2号课程得学生姓名:  内连接:select sname from student,sc where student.sno=sc.sno and cno=2        或:select sname from student where sno in   --外层查询/

SQL课堂笔记--查询表1

2017/11.10 SQL的主要功能: 1.数据定义 2.数据查询 3.数据操作 4.数据控制功能(了解)  SQL语言的动词: 数据定义:create,drop, alter 数据查询:select 数据操作:insert,update,deledte 数据控制:crant,revoke 数据查询语句的基本格式:  select[distinct] 目标列      //distinct去掉记录中的重复值  from 基本表(或视图)  [where 条件表达式]  [group by 列名

SQL课堂笔记--多表查询

2017.11.14 二:最基础的连接查询----多表查询 1.使用内部连接  内部连接也叫自然连接,最常见的连接形式   语法:     select 选择列表 from 表名1 ,表名2 where 表名1.列名1=表名2.列名2         或select 选择列表 from 表名1 join 表名2 on 表名1.列名1=表名2.列名2 例1:查询每个学生及其选修课程情况:  select student.*,sc.* from student,sc where student.sn

SQL课堂笔记--管理表

2017.11.09 1.使用T-SQL语句显示表的信息,调用系统的存储过程 sp_help (student)表名2.修改表的结构 增加列:  alter table 表名  add 列名 列的描述 删除列:  alter table 列名  drop column 列名 重命名表名:  use 数据库名  go  sp_rename 'old_table name','new_table name',('object')可写可不写 注释:  单行注释 --  多行注释/*     */ 3.

SQL课堂笔记--存储过程和触发器

---恢复内容开始--- 2017.11.21                  存储过程和触发器   1.存储过程的作用 当SQL server 创建应用程序时,可以用两种方法存储和执行程序: 1).将程序存储在本地,然后创建SQL server 发送命令并处理结果的应用程序  2).将程序以存储过程的形式存储在SQL Server服务器中,然后创建执行存储过程并处理结果的应用程序.SQL server推荐使用这种  2.存储过程(Store Procedure)是一组为了完成特定功能的T-S

sql 聚合函数

Sql Server 字符串聚合函数 ql Server 有如下几种聚合函数SUM.AVG.COUNT.COUNT(*).MAX 和 MIN,但是这些函数都只能聚合数值类型,无法聚合字符串. 如下表:AggregationTable Id Name 1 赵 2 钱 1 孙 1 李 2 周 如果想得到下图的聚合结果 Id Name 1 赵孙李 2 钱周 利用SUM.AVG.COUNT.COUNT(*).MAX 和 MIN是无法做到的.因为这些都是对数值的聚合.不过我们可以通过自定义函数的方式来解决