SQL聚合

摘要:
SQL聚合的规则:在查询表进行聚合时,SELECT子句中只能写入以下三个内容:1.通过GROUP BY子句指定的聚合键2.聚合函数3.在日常SQL语句中使用常量谓词。我们将使用“=”比较谓词,BETWEEN、LIKE、IN和ISNULL。这些谓词背后的原理是什么?第二种方法是在SELECT语句中添加更多的成员列。这种方法是错误的。原因是数据库中的表现在存储了每个人的成员,并且无法计算每个团队的成员。使用groupby聚合后,SQL操作对象从“行”变为“行集合”。

sql聚合的规定:

对表进行聚合查询时,只能在SELECT子句中写下面3种内容:

1.通过GROUP BY子句指定的聚合键

2.聚合函数

3.常量

谓词

日常写SQL语句中,我们会用到"< > ="比较谓词,BETWEEN、LIKE、IN、IS NULL,那么这些谓词背后的原理是什么?

谓词其实是一个特殊的“函数”,返回值为True 或者 FALSE 或者 UNKNOWN,我们在where子句中加入谓词,来返回 值为真 的行。

为什么一定要按照这个规定做?

一个例子

有这么一个表格: 字段为member,team,age

下面是正确和错误的做法

SELECT team, AVG(age) FROM Teams GROUP BY team √

SELECT team, AVG(age), member FROM Teams GROUP BY team   ×

第一种做法是按队伍分组,求每个队伍的平均年龄,这种做法是正确的。

而第二种做法在SELECT语句中多加member列,这种方式是错的,原因是,数据库中的表此时存的是每个人的member,无法求出每个team的member。

使用group by聚合后,sql的操作对象由原来的“行”变为“行的集合”。

虽然没法求出每个team的member是什么?但sql可以求出每个team的最大member是什么?

SELECT team, AVG(age), MAX(member) FROM Teams GROUP BY team   

练习:求出小组中年龄最大的成员的“组名”,“年龄”,“姓名”

正确的做法是

SELECT team, MAX(age), (SELECT MAX(member) FROM Teams T2 WHERE T2.team = T1.team AND T2.age = MAX(T1.age)) AS oldest FROM Teams T1 GROUP BY team;

免责声明:文章转载自《SQL聚合》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSS3动画进度条高性能NoSQL下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用TRY CATCH进行SQL Server异常处理

TRY...CATCH是Sql Server 2005/2008令人印象深刻的新特性.提高了开发人员异常处理能力.没有理由不尝试一下Try.. Catch功能.    *      TRY 块 - 包含可能产生异常的代码或脚本    *      CATCH 块 - 如果TRY块出现异常,代码处理流将被路由到CATCH块.在这里你可以处理异常,记录日志等....

Access sql语句创建表及字段类型

创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NULL, [字段名2] MEMO, [字段名3] COUNTER NOT NULL, [字段名4] DATETIME, [字段名5] TEXT(200), [字段名6] TEXT(200))...

PL SQL显示的字段长度不全

PL SQL显示的字段长度不全:18位,只显示17位。 解决方法:只是在PL SQL中显示少一位,但是按18位查询,都正确。             说明:Oracle数据库存储没问题,只是PL SQL工具显示有点问题。             解决方法:在列字段长度,设置为19位。(多设一位即可。)其它同理,20位的设置21位。...

数据库中增加操作insert into的用法和查询select的用法

insert into的用法 1.一条insert into 可以插入多条记录 2.insert into 能判断主键是否冲突,和做出冲突处理 如果主键冲突的话会报错,还能写成如果冲突就更新的形式格式为 : insert into 表名 (字段列表) values (字段值列表) on duplicate key update 字段=值,字段=值(列表...

Hibernate参数设置一览表

属性名 用途 hibernate.dialect 一个HibernateDialect类名允许Hibernate针对特定的关系数据库生成优化的SQL.取值full.classname.of.Dialect hibernate.show_sql 输出所有SQL语句到控制台. 有一个另外的选择是把org.hibernate.SQL这个log...

利用dump函数理解oracle如何存储各种类型数据

1.dump函数介绍 1.1标准格式 DUMP(expr[,return_fmt[,start_position][,length]]) expr:需要dump的表达式 return_fmt:指返回参数的格式,有5种用法: 1)8:以8进制返回结果的值 2)10:以10进制返回结果的值(默认) 3)16:以16进制返回结果的值 4)17:以单字符的形式返回...