Sybase sql由浅入深(二)(集合、分组和排序)

Sybase sql由浅入深(二)(集合、分组和排序)集合 分组和排序 1 集合函数包括 sum avg count min max 和 count 使用集合函数可对数据进行计算和汇总

欢迎大家来到IT世界,在知识的湖畔探索吧!

集合、分组和排序

(1) 集合函数包括:sum、avg、count、min、max 和 count(*)。 使用集合函数可对数据进行计算和汇总。 销量求和:Select sum(sell_total) from sell_table_name ; 销量求平均值:Select avg(sell_total) from sell_table_name ; 有效销量计数:Select count(sell_total) from sell_table_name ; 销量中的最大值:Select max(sell_total) from sell_table_name ; 销量中的最小值:Select min(sell_total) from sell_table_name ; 不能在 where 子句中使用集合函数 大多数 select 语句都包含 where 子句,它限制着集合被应用的行。 如果 select 语句包含 where 子句,但不是 group by 子句,集合函数就为行的子集生成单个值,称为标量集合。但是, select 语句也可在其选择列表中包含列 (Transact-SQL 扩展),为结果表中每一行都重复这一个值。 Select “2023” 年份,sum(sell_total) from sell_table_name ; 可对任何类型的列使用集合函数,但有下列例外情况: sum 和 avg 只能用于数值列 - int、 smallint、 tinyint、 decimal、 numeric、 float 和 money。 不能对 bit 数据类型使用 min 和 max。 只有 count(*) 集合函数可用于 text 和 image 数据类型。 count 查找的是表达式中非空值的数目,而 count(*) 查找的是表中总行数。 count(*) 返回指定表中的行数,但未刨除重复行。它将每行都计算在内,包括那些包含空值的行。 可选关键字 distinct 只能和 sum、 avg 以及 count 一起使用。使用 distinct 时, 先消除重复值,然后进行计算。 查询不同城市的数量:select count(distinct city) from student_city; 

欢迎大家来到IT世界,在知识的湖畔探索吧!

欢迎大家来到IT世界,在知识的湖畔探索吧!(2) group by、 having 以及 order by 子句对数据按类别和子群进行组织 group by 子句将查询的输出分成若干组。可按一个或多个列名进行分组,也可按表达式中使用数值数据类型计算列的结果进行分组。与集合一起使用时,group by 检索各子群中的计算,并可能返回多行。 不能对 text 或 image 数据类型的列进行 group by 操作。 选择列表中的列必须出现在 group by 表达式中,或者它们必须是集合函数的参数。 group by 表达式只能包含选择列表中的列名。 可在 group by 子句中列出多个列以对组进行嵌套,用 group by 最多可指定 16 个列或表达式。 如:Select A,B,sum(A),avg(B) from table_name Group by A,B; 如果分组列包含一个空值,则该空值所在行在结果中将自成一组。如果分组列中包含多个空值,则这些空值组成一个组。 可在带有 group by 的语句中使用 where 子句。不满足 where 子句中条件的行将被首先排除,然后才会执行任何分组。 如:Select age from student_info where age>18 group by age; 使用 having 子句可显示或拒绝由 group by 子句所定义的行。 having 子句可引用出现在选择列表中的任何项。 在 having 子句中包括多个条件时,使用 and、or 或 not 将条件进行组合。 例如,若要按出版社对 books 表分组,并且只包含那些预付款总额超过10000元、平均书价低于 20元、标识号 (cbs_id) 大于 0200 的出版社,语句为: select pub_id, sum(money), avg(price) from books group by pub_id having sum(money) > 10000 and avg(price) < 20 and cbs_id> "0200" ; order by 子句允许按一个或多个 (最多为 31 个)列对查询结果排序。每个排序都可是升序 (asc) 或降序 (desc) 的。如果未指定任何排序方式,则缺省为 asc。 可使用选择列表中列的位置号代替列名。列名和选择列表号可混合使用。 select pub_id, sum(money), avg(price) from books group by pub_id having sum(money) > 10000 and avg(price) < 20 and cbs_id> "0200" Order by sum(money) desc,1 ; 如果 order by 或 group by 列不在 select 列表中,带有 order by 或 group by 的 select distinct 查询可返回重复值。 
(3)扩展: 汇总数据组:compute 子句(每个汇总值均作为一行处理) select type, price, advance from titles order by type compute sum(price), sum(advance) by type; compute 子句中的列必须出现在选择列表中。 如果将 compute 与 by 关键字一起使用,也必须同时使用 order by 子句。 在 by 之后列出的列必须与在 order by 后面列出的列相同或是其子集,并且它们必须都采用同样的从左向右的顺序,以同一表达式开始且不跳过任何表达式。 compute 子句可以是下列任何一种形式或全部形式: compute row_aggregate (column_name) by a, b, c compute row_aggregate (column_name) by a, b compute row_aggregate (column_name) by a compute 子句不能是下列任何形式: compute row_aggregate (column_name) by b, c compute row_aggregate (column_name) by a, c compute row_aggregate (column_name) by c 必须在 order by 子句中使用列名或表达式;不能按列标题排序。 不带 by 的 compute 关键字可用于生成总和、总计数等。如果使用不 带 by 的 compute 关键字,order by 就是可选的。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/113942.html

(0)
上一篇 43分钟前
下一篇 28分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信