Oracle的count()函数

目录

一、各子句的count使用

1、SELECT列表中使用count

2、WHERE子句中使用count

3、HAVING子句中使用count

4、ORDER BY子句中使用count

二、count(1)、count(*)、count(列)、count(distinct 列)

1、count(1):

2、count(*):

3、count(列):

4、count(distinct 列)


在Oracle数据库中,count函数用于计算某个列或表达式的行数。它可以用于SELECT语句中的SELECT列表、WHERE子句、HAVING子句和ORDER BY子句。

一、各子句的count使用

1、SELECT列表中使用count

在SELECT语句的SELECT列表中,可以使用count函数来统计某个列或表达式的行数。例如,下面的SQL语句将返回employees表中的员工数:

SELECT count(*) 
FROM employees;

2、WHERE子句中使用count

在SELECT语句的WHERE子句中,可以使用count函数来过滤行数满足某个条件的记录。例如,下面的SQL语句将返回employees表中工资大于等于5000的员工数:

SELECT count(*) 
FROM employees 
WHERE salary >= 5000;

3、HAVING子句中使用count

在SELECT语句的HAVING子句中,可以使用count函数来统计分组后的行数,并过滤出满足某个条件的记录。HAVING子句用于过滤分组后的结果集。当count函数出现在HAVING子句后面时,它用于计算分组后的行数,以便对结果集进行过滤。例如,下面的SQL语句将返回所有部门中员工数大于等于5的部门:

SELECT department, count(*) 
FROM employees 
GROUP BY department 
HAVING count(*) >= 5;

 count(*)用于计算每个部门的员工数,而HAVING子句用于过滤出员工数大于等于5的部门。

4、ORDER BY子句中使用count

在SELECT语句的ORDER BY子句中,可以使用count函数来按照某个列或表达式的行数对结果集进行排序。例如,下面的SQL语句将返回employees表中按照工资升序排序的员工数:

SELECT count(*) 
FROM employees 
ORDER BY salary ASC;

    总结一下哈,其实count函数在SELECT语句中的实际用法包括:统计行数、过滤行数、分组统计行数并过滤、按照行数排序等。使用count函数可以方便地对结果集进行筛选和排序,从而满足不同的查询需求。

二、count(1)、count(*)、count(列)、count(distinct列)

count(1)、count(*)和count(列)都可以用于计算行数,但是它们的实现方式不同。

1、count(1):

表示计算结果集中每一行都有值的列数,而这个值可以是任何值,因为只是要计算行数。实际上,count(1)的执行效率比count(*)更高,因为它不需要读取表中的所有列。

例如,下面的SQL语句将返回表中所有行的行数:

SELECT count(1) 
FROM table_name;

2、count(*):

表示计算结果集中所有行的行数,即统计所有行,包括NULL值,而且它会读取表中的所有列。因此,如果表中有大量的列,使用count(*)的执行效率可能会较低。

例如,下面的SQL语句将返回表中所有行的行数:

SELECT count(*) 
FROM table_name;

3、count(列):

当需要统计某一列的非空数量时,应该使用count(列),例如count(id)可以统计id列中非空值的数量。--不包含NULL值

例如,下面的SQL语句将返回表中所有行的行数:

select count(comm)
from emp;

4、count(distinct列)

在Oracle中,COUNT(DISTINCT 列)用于计算某一列中不同值的数量。它会跳过重复的值,只计算不同的值。

例如,假设有一个名为employee的表,其中有一个列为department,表示员工所在的部门。要计算不同部门的数量,可以使用以下查询语句:

SELECT COUNT(DISTINCT department) 
FROM employee;

这将返回employee表中不同部门的数量。

另外,COUNT(DISTINCT 列)也可以与其他函数一起使用,例如:

SELECT AVG(SALARY), COUNT(DISTINCT department) 
FROM employee;

这将返回employee表中平均工资和不同部门的数量。

需要注意的是,COUNT(DISTINCT 列)可能会影响查询性能,因为它需要对列中的所有不同值进行排序和比较。因此,在使用它时需要谨慎考虑性能问题。

总结:

当只需要统计行数时,建议使用count(1),因为它的执行效率更高。

但是,在需要统计NULL值的情况下,只能使用count(*)。

总之,使用哪种count函数最终取决于具体需求和查询效率。

你可能感兴趣的:(#,Oracle数据库基础,oracle,数据库,sql)