serverl列求和 sql_SQL分类汇总

上一节中,我们学习了SQL的简单查询。但在现实生活中,我们除了查询数据外,还会对数据按照一定的标准进行分类,然后在分完类的基础上对各类别相关数据分别进行求和、求平均数、求个数、求最大值、求最小值等方法的汇总。这一节中,我们将简单学习SQL的分类汇总。

一、汇总

常用于汇总的有以下函数,我们称之为聚合函数,它们只针对列,因此又叫做列函数

70c48899be069447cc77e2ce7bbe1dd0.png

d50bfbca99272d13f8aad0eb108bb2ef.png

e2c3df165b48d4b288db13690eaa79c8.png
计算学生不包括重复姓名的人数

1476d1b6357090fb9ae484ce2cff4a85.png

12f8ac74e17fcf2b89b5c52213736ddf.png

8e4b94c3ef584c227d042a105db6f204.png

a8a736aee06d98eaea722e836e95ae55.png

c0c3a63358f58bcec5f077f177ba55f4.png

二、

1、分组

group by与之对应的关键词“某类”、“每个”。如查询男女生的人数、查询每个学生的平均成绩等;

c88ff0475d83eab5b6713fd9fe11fc34.png

698c89450b1f464e67dd43b02aed5c19.png
男女生人数

5db8f20371e512200c7777bdcee95104.png
课程选修的人数

3563d03e287580c90fee2a09c9562fa5.png
每门课程最高分和最低分

注意!!!!!!在高版本的navicat中会出现这样的情况

086e480cd7ee340c81f15ad0e92c1467.png
查看每个课程号中的最低成绩以及对应学号

cd90636eaed1214a2b945ebddaca1eb0.png

为什么会报错呢?按照运行顺序,sql先从score表中将数据按照课程号分组,接着选出课程号、最低成绩,然而在学号这里出现了错误,因为按照课程号分组的学号列有多条数组,而group by只能显示一个分组的一条数据,sql无法识该选哪条,所以报错。

bdffed842a06746604f48aa652e7fee0.png

以下这种情况也是同样的错误:

d15339f84529baf1d982d3d2f717b2d1.png

也就是说,我们在使用分组查询时,select语句中出现的字段要么是group by后的字段,要么是聚合函数或者汇总函数!

2、对分组结果指定条件

having,常跟聚合函数一起使用。

068bed30e71013f92b936c1e16652319.png
查询重名的人数

注意区分having和where
1、where只针对指定行,所以后面不可以跟聚合函数,having可以
2、优先级:where>聚合函数>having

eafbaaec09879332bec915e0977e77e6.png
查询平均成绩>80的课程

694f234ee3dff583ccc0912936e13898.png
这里注意sql运行顺序,select最后运行,其他按输入顺序,所以我们在score找不到平均成绩这一列

f1e0ff5090d924440eb63b9d06083c88.png

三、排序

order by 列名1 desc/asc,列名2 desc/asc; (默认asc)

注意

1、进行多列排序时,左边列优先于右边列,即左边列排序成功,右边列不会再进行排序。

c63dcdfb7d0d12d044fd3c8570b2d7ee.png
这里不能把winner写在前面,因为这样winner排序成功后就不会对subject进行排序,就无法把化学和物理学科显示在最后面了

2、空值在前,其次是空字符串

4c5aeef29ce843af63ca36b6245d6d13.png

四、限制

limit,限制查询结果的指定行数

5180c350d5f1186e1bcc00879d0f6ce4.png
查出其中两个学生的成绩

五、SQL运行顺序

fbd252211cc5941a34efdb3d30007e4a.png

1b72745ee4f089f03a9f8e0aa6379d54.png
注意这里运行顺序为:从world表里找出人口超过1000万的数据,从这些数据里找出洲和数目,而sum(name)只有一条数据,固只显示了一行数据,并不是Asia有超85个至少有1000人口的国家

7bef832c083f4eaffe696e99bb8c4965.png
正确写法应该再加个group by,才能找到【每个】洲份拥有的至少有1000万国家的数目
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值