目录
一、各子句的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子句。
在SELECT语句的SELECT列表中,可以使用count函数来统计某个列或表达式的行数。例如,下面的SQL语句将返回employees表中的员工数:
SELECT count(*)
FROM employees;
在SELECT语句的WHERE子句中,可以使用count函数来过滤行数满足某个条件的记录。例如,下面的SQL语句将返回employees表中工资大于等于5000的员工数:
SELECT count(*)
FROM employees
WHERE salary >= 5000;
在SELECT语句的HAVING子句中,可以使用count函数来统计分组后的行数,并过滤出满足某个条件的记录。HAVING子句用于过滤分组后的结果集。当count函数出现在HAVING子句后面时,它用于计算分组后的行数,以便对结果集进行过滤。例如,下面的SQL语句将返回所有部门中员工数大于等于5的部门:
SELECT department, count(*)
FROM employees
GROUP BY department
HAVING count(*) >= 5;
count(*)用于计算每个部门的员工数,而HAVING子句用于过滤出员工数大于等于5的部门。
在SELECT语句的ORDER BY子句中,可以使用count函数来按照某个列或表达式的行数对结果集进行排序。例如,下面的SQL语句将返回employees表中按照工资升序排序的员工数:
SELECT count(*)
FROM employees
ORDER BY salary ASC;
总结一下哈,其实count函数在SELECT语句中的实际用法包括:统计行数、过滤行数、分组统计行数并过滤、按照行数排序等。使用count函数可以方便地对结果集进行筛选和排序,从而满足不同的查询需求。
count(1)、count(*)和count(列)都可以用于计算行数,但是它们的实现方式不同。
表示计算结果集中每一行都有值的列数,而这个值可以是任何值,因为只是要计算行数。实际上,count(1)的执行效率比count(*)更高,因为它不需要读取表中的所有列。
例如,下面的SQL语句将返回表中所有行的行数:
SELECT count(1)
FROM table_name;
表示计算结果集中所有行的行数,即统计所有行,包括NULL值,而且它会读取表中的所有列。因此,如果表中有大量的列,使用count(*)的执行效率可能会较低。
例如,下面的SQL语句将返回表中所有行的行数:
SELECT count(*)
FROM table_name;
当需要统计某一列的非空数量时,应该使用count(列),例如count(id)可以统计id列中非空值的数量。--不包含NULL值
例如,下面的SQL语句将返回表中所有行的行数:
select count(comm)
from emp;
在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函数最终取决于具体需求和查询效率。