SQL count详细用法
来源:互联网 发布:html手机游戏源码 编辑:程序博客网 时间:2024/05/19 00:16
$keyname = “COUNT(*)”;
$resultkey = “AVG(net_amount)”;
COUNT
COUNT函数计算出结果集合中的数据行数。和其他函数一样它接受一个参数。以下的基本示例能告诉你数据表内的行数:SELECT COUNT(*) FROM Sales;
你也可以用它来计算任何结果集合中的行数。
SELECT COUNT(*) FROM Sales WHERE net_amount > 100;
如果你想看看某特定列有多少行包含非空值,那你不妨对该列使用COUNT函数。注意,除非数据库设置为字段为空时缺省填充NULL否则将返回表内数据行的总数。另外,列出的列在超出一个的情况下会引起错误。
SELECT COUNT(company) FROM Sales;
COUNT还可以用来计算DISTINCT结果集合中的行数。
SELECT COUNT(DISTINCT company, last_name) FROM Sales;
COUNT语句通常用在程序中确定FOR循环的循环次数。
COUNT() 函数返回匹配指定条件的行数。
SQL COUNT() 语法
SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name
SQL COUNT(*) 语法
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name
注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。
SQL COUNT(column_name) 实例
我们拥有下列 "Orders" 表:
现在,我们希望计算客户 "Carter" 的订单数。
我们使用如下 SQL 语句:
SELECT COUNT(Customer) AS CustomerNilsen FROM OrdersWHERE Customer='Carter'
以上 SQL 语句的结果是 2,因为客户 Carter 共有 2 个订单:
SQL COUNT(*) 实例
如果我们省略 WHERE 子句,比如这样:
SELECT COUNT(*) AS NumberOfOrders FROM Orders
结果集类似这样:
这是表中的总行数。
SQL COUNT(DISTINCT column_name) 实例
现在,我们希望计算 "Orders" 表中不同客户的数目。
我们使用如下 SQL 语句:
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
结果集类似这样:
这是 "Orders" 表中不同客户(Bush, Carter 和 Adams)的数目。
COUNT()详解
首先要了解使用COUNT()与其它替代方法之间有何不同,以及这个不同的成因。COUNT()的完整语法是:
COUNT ( { [ ALL | DISTINCT ] expr
其 中,expr
COUNT(*) 返回表的所有纪录数,而COUNT(expr
实践出真知
如前所说,有人以为COUNT(columnname)比COUNT(*)要快,因为 COUNT(*)必须读取所有列的纪录(就象运行Select * FROM MYTABLE指令),而COUNT(columnname)只需读取指定 列的纪录。这个理解是错误的,有好几个理由。
首先,如果SQL Server不读取整行纪录就无法得到单个列的内容。 SQL Server用磁盘上8KB的数据页来储存各行纪录。这些页面中安放一行或多行纪录(取决于每行纪录的大小。在有些意外情况下,一行纪录可能大于 8060 字节),当SQL Server要处理这些页面数据时就将数据读到内存(RAM)中。为确定单行(或多行)纪录的值,要将完整的磁盘页读到内存中。这些页面可能已经缓存在内存,这样就会加快运行速度。但SQL仍然要从内存中读取整页的数据来检查一行纪录中的某个列数据。
因为只要求获得纪录数(行数),SQL Server不是读取这些数据页,而是读取索引数据 - 如果有索引的话。索引的存储方法与数据一样,也使用一个8 KB的索引页。索引总是比整行数据要小(索引只包括数列甚至一列的数据),一个索引页可以安放比一个数据页更多行的纪录。这意味着SQL Server用索引页检查纪录数时读取的页面数量比用数据页要少,这是好事。
不 但COUNT(索引域名)这样做,COUNT(*)同样也使用索引来计算行数。有时,COUNT(columnname)中指定的列不是索引列,而表中有 其它列做索引。在这种情况下,COUNT(*)可以使用索引列来计算纪录数,而COUNT(非索引域名)就不得不通过读取数据页来计算非空纪录数了。
可以用SQL Query
Analyzer来测试下面的脚本(如果测试器未将结果显示设置为文本方式,可按Ctrl-T设置):
USE Northwind
GO
SET STATISTICS IO ON
Select COUNT(*) FROM orders
Select COUNT(CustomerId) FROM orders
Select * FROM orders
SET STATISTICS IO OFF
指 令SET STATISTICS IO ON要求SQL Server输出执行查询时所需的I/O使用数量,可以用这个量来比较不同查询语句中的资源使用 情况,从而决定该用哪种查询。脚本执行后立即可得到统计结果。这里关心的是读取逻辑和/或物理页的数量。逻辑页是从内存读取数据(数据页和/或索引页)的 页面数量,物理页是从磁盘读取的页面数量。在我的机器上用二个COUNT()得到的纪录数都是830,如果从没有在Order表中增删过纪录,那么你也应 该得到这个数。现在来看看从运行上述脚本后得到的逻辑页读次数(多运行几次脚本,可以缓存物理页),我的第一条指令读取3次逻辑页,而第二条指令读取了 21次逻辑页。因为Order表中的CustomerId列没有建索引,所以第二条指令读取的是数据页,而第一条指令读取的是索引页(我的机器 上,Order表有ShippersOrders索引)。
到底用哪条指令好?
如上阐明,用COUNT(*)肯定 不会更差。相反,有时用COUNT(expr
但是...
通 常情况下,没有理由不使用COUNT(*)。但正如本文开始所说,有时要(或应该)用COUNT(expr
比较以下二个指令就能看到问题症结所在:
Select SUM(column) / COUNT(*) FROM table
Select SUM(column) / COUNT(column) FROM table
这 二个指令将返回不同的结果。因为SUM()是忽略NULL值的(NULL不按0计算)。如果总数(sum)是1500,行数为150,其中column列 有50行纪录为空值,那么,第一条查询指令得到的结果是10(1500/150),而第二条查询指令得到的结果是15(1500/100)。在我的数据库 咨询工作中经常遇到这个问题。这也是那些不了解不同聚合函数(如上述的SUM()和COUNT())处理空值的不同方式的SQL程序员所遇到的问题所在。
- SQL count详细用法
- SQL COUNT的用法
- SQL - SELECT COUNT用法
- SQL - SELECT COUNT用法
- SQL COUNT的用法
- SQL中Count()用法
- sql语句中的count(*)和count(列表)的用法
- SQL COUNT() 语法总结及用法
- sql中Count函数的用法
- sql语句中count的用法
- SQL语句中count(1)count(*)count(字段)用法的区别
- SQL函数的详细用法
- UPDATE SQL语句详细用法
- SQL LOADER的详细用法
- sql substr()函数用法详细
- count用法
- count用法
- sql count
- C++ 初始化列表
- 时序图符号
- TCP/IP笔记 四.应用层(2)——FTP
- 10个强大的Ajax jQuery文件上传程序
- 代码也层次清晰解偶充分重用率高
- SQL count详细用法
- int *ptr=(int *)(&a+1)问题的探讨
- TCP/IP笔记 四.应用层(3)——HTTP
- unity单机ARPG游戏求伙伴····
- 微信API
- hibernate 自定义字段查询映射为pojo对象的新思路
- 沃通(WoSign)承办CA浏览器论坛北京工作会议圆满成功
- 无法访问局域网共享
- 图(Graph)——基本概念、存储、遍历