第四章 SQL聚合函数 COUNT(二)
2021/12/25 19:09:07
本文主要是介绍第四章 SQL聚合函数 COUNT(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 第四章 SQL聚合函数 COUNT(二)
- 权限
- 性能
- 未提交事务所做的更改
- 示例
第四章 SQL聚合函数 COUNT(二)
权限
要使用COUNT(*)
,必须对指定的表具有表级别的SELECT
权限。
要使用COUNT(column-name)
,必须对指定的列具有列级的SELECT
权限,或者对指定的表具有表级的SELECT
权限。
可以通过调用%CHECKPRIV
命令来确定当前用户是否具有SELECT
权限。
可以通过调用$SYSTEM.SQL.Security.CheckPrivilege()
方法来确定指定的用户是否具有表级SELECT
权限。
性能
为了获得最优的COUNT
性能,你应该按照以下方式定义索引:
- 对于
COUNT(*)
,如果需要,定义位图扩展索引。
这个索引可能是在创建表时自动定义的。 - 对于
COUNT(fieldname)
,为指定字段定义一个位片索引。
查询计划优化COUNT(fieldname)
自动应用默认的排序规则到fieldname
。
未提交事务所做的更改
与所有聚合函数一样,COUNT
总是返回数据的当前状态,包括未提交的更改,而不管当前事务的隔离级别如何,如下所示:
COUNT
插入和更新的记录的计数,即使这些更改尚未提交并可能回滚。COUNT
不计算已删除的记录,即使这些删除还没有提交并且可以回滚。
示例
下面的示例返回Sample.Person
中的总行数:
SELECT COUNT(*) AS TotalPersons FROM Sample.Person
下面的示例返回Sample.Person
中的姓名、配偶和最喜欢的颜色的计数。这些计数不同,因为有些配偶和FavoriteColors
字段为NULL
;Count
不计算NULL
:
SELECT COUNT(Name) AS People, COUNT(Spouse) AS PeopleWithSpouses, COUNT(FavoriteColors) AS PeopleWithColorPref FROM Sample.Person
下面的示例返回三个值:总行数、FavoriteColors
字段中的非空值总数和FavoriteColors
字段中不同的非空值的总数:
SELECT COUNT(*) As TotalPersons, COUNT(FavoriteColors) AS WithColorPref, COUNT(DISTINCT FavoriteColors) AS ColorPrefs FROM Sample.Person
下面的示例使用Count DISTINCT
返回Sample.Person
中不同FavoriteColors
值的计数。(FavoriteColors
包含多个数据值和多个Null
。)。此示例还使用DISTINCT
子句为每个不同的FavoriteColors
值返回一行。行计数比COUNT(DISTINCT FavoriteColors)
计数大1,因为DISTINCT
返回单个NULL
的行作为DISTINCT
值,但COUNT DISTINCT
不计算NULL
。COUNT(DISTINCT BY(FavoriteColors)%ID)
值与行计数相同,因为BY
子句将单个NULL
计数为DISTINCT
值:
SELECT DISTINCT FavoriteColors, COUNT(DISTINCT FavoriteColors) AS DistColors, COUNT(DISTINCT BY(FavoriteColors) %ID) AS DistColorPeople FROM Sample.Person
下面的例子使用GROUP BY
为每个FavoriteColors
值返回一行,包括一行NULL
。与每行关联的是两个计数。第一个用FavoriteColors选
项计算数字或记录;不计算空记录。第二个计算与每个favoritecor
选择关联的名称数量;由于Name
不包含空值,因此可以使用空值来计算有利颜色的数量:
SELECT FavoriteColors, COUNT(FavoriteColors) AS ColorPreference, COUNT(Name) AS People FROM Sample.Person GROUP BY FavoriteColors
以下示例返回Sample.Person
中每个Home_State
值的Person
记录计数:
SELECT Home_State, COUNT(*) AS AllPersons FROM Sample.Person GROUP BY Home_State
以下示例使用%AFTERHAVING
返回至少有一个人超过65
岁的每个州的个人记录计数和超过65
人的人数计数:
SELECT Home_State, COUNT(Name) AS AllPersons, COUNT(Name %AFTERHAVING) AS Seniors FROM Sample.Person GROUP BY Home_State HAVING Age > 65 ORDER BY Home_State
以下示例同时使用%FOREACH
和%AFTERHAVING
关键字。它为姓名以“A”
、“M”
或“W”
(HAVING
子句和GROUP BY
子句)开头的人员所在的州返回一行。每个状态行包含下列值:
Count(Name)
:数据库中所有人员的计数。(此数字对于所有行都是相同的。)COUNT(Name %FOREACH(Home_State))
:该州所有人的计数。COUNT(Name %AFTERHAVING)
:数据库中符合HAVING
子句条件的所有人员的计数。(此数字对于所有行都是相同的。)COUNT(Name %FOREACH(Home_State) %AFTERHAVING)
: 该州符合HAVING子句标准的所有人员的计数。
SELECT Home_State, COUNT(Name) AS NameCount, COUNT(Name %FOREACH(Home_State)) AS StateNameCount, COUNT(Name %AFTERHAVING) AS NameCountHaving, COUNT(Name %FOREACH(Home_State) %AFTERHAVING) AS StateNameCountHaving FROM Sample.Person GROUP BY Home_State HAVING Name LIKE 'A%' OR Name LIKE 'M%' OR Name LIKE 'W%' ORDER BY Home_State
下面的示例显示具有串联表达式的Count
。它使用连接运算符(||
)返回FavoriteColors
字段中非空值的总数,以及FavoriteColors
中与其他两个字段连接的非空值的总数:
SELECT COUNT(FavoriteColors) AS Color, COUNT(FavoriteColors||Home_State) AS ColorState, COUNT(FavoriteColors||Spouse) AS ColorSpouse FROM Sample.Person
当两个字段连接在一起时,COUNT
只计算其中两个字段都没有空值的那些行。因为Sample.Person
中的每一行都有一个非空的Home_State
值,所以串联FavoriteColors||Home_State
返回与FavoriteColors
相同的计数。由于Sample.Person
中的某些行的配偶值为NULL
,因此串联FavoriteColors||SPOSPORT
将返回FavoriteColors
和配偶的值均为非NULL
值的行数。
这篇关于第四章 SQL聚合函数 COUNT(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享
- 2024-12-24uniapp 连接之后会被立马断开是什么原因?-icode9专业技术文章分享
- 2024-12-24cdn 路径可以指定规则映射吗?-icode9专业技术文章分享
- 2024-12-24CAP:Serverless?+AI?让应用开发更简单
- 2024-12-23新能源车企如何通过CRM工具优化客户关系管理,增强客户忠诚度与品牌影响力
- 2024-12-23原创tauri2.1+vite6.0+rust+arco客户端os平台系统|tauri2+rust桌面os管理
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享