假设表的字段为depart_id, depart_name, employeename,查询具有depart_id的记录数大于2的所有记录的depart_id,和总数,正确的语句应为:
select depart_id,count(*) from depart group by departId having count(*)>=2
注意:先分组在算count
下面还有2个例子:
例1:查询出现过2次的user。
往往初学者会错误地认为在where 语句里直接使用count()算法,很显然这个想法是错误的,count()方法并不能被用在where子句中,为了解决问题,我们可以在group by子句后面使用HAVING来做条件限制。
错误做法:select * from user_num where count(user)>=2 group by user;
正确做法:select * from user_num group by user HAVING count(user)>=2 ;
解释说明:HAVING 与 WHERE 类似,可用来决定选择哪些记录。HAVING 子句在SELECT语句中指定,显示哪些已用 GROUP BY 子句分组的记录。在GROUP BY组合了记录后, HAVING会显示 GROUP BY 子句分组的任何符合 HAVING 子句的记录。
例2:查询单一用户的num总和大于10的用户。
有前面的经验,把sum()方法写在HAVING子句中。
正确做法:select * from user_num group by user HAVING sum(num)>10 ;
注意:一个HAVING子句最多只能包含40个表达式,HAVING子句的表达式之间可以用AND和OR分割。
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。
通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。
HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后对组记录进行筛选。
让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。
SQL实例:
一、显示每个地区的总人口数和总面积:
先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。
二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。
相反,HAVING子句可以让我们筛选成组后的各组数据.
SELECT SUM(population) FROM bbc |
这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。
通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。
HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后对组记录进行筛选。
让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。
SQL实例:
一、显示每个地区的总人口数和总面积:
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region |
先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。
二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region HAVING SUM(area)>1000000 |
在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。
相反,HAVING子句可以让我们筛选成组后的各组数据.
如何用一条sql语句得到表t1,t2,t3三个表的总条数?
select sum(a) from ( select count (*) as a from biao1 union all select count (*) as a from biao2 union all select count (*) as a from biao3 )
Select (select count(0) from t1) + (select count(0) from t2) + (select count(0) from t3)
count(*)统计的是结果集的总条数,count(字段名)统计的是该字段值不为null的总条数。
count(*) count(1)区别
效果:两者的返回结果是一样的。 www.2cto.com
意义:当count的参数是具体值时(如count(1),count('a')),
count的参数已没有实际意义了。
范围:在统计范围,count(*)和count(1) 一样,都包括对NULL的统计;
count(column) 是不包括NULL的统计。
速度:表沒有主键(Primary key),count(1)比count(*)快;
否则,主键作为count的参数时,count(主键)比count(1)和count(*)都快;
表只有一个字段,count(*),count(1)和count(主键)速度一样。
相关推荐
在上面的第二个SQL实例中,`SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region HAVING SUM(area)>1000000`将显示那些总面积超过1000000的地区的总人口和总面积。由于WHERE子句无法处理聚合函数的...
- `GROUP BY` 主要用于数据分组,将具有相同字段值的数据组合在一起,通常与聚合函数(如 `SUM`、`COUNT`、`AVG`、`MAX`、`MIN`)一起使用,以计算每个组的统计信息。 - 当使用 `GROUP BY` 时,`SELECT` 语句中未...
2. `GROUP BY`:这是用于分组数据的关键字,常与聚合函数(如SUM、COUNT、AVG等)一起使用。当你需要根据某个字段的值对数据进行分类并计算每个类别的总和、平均值等时,就会用到`GROUP BY`。例如,`SELECT ...
### SQL中的ORDER BY, GROUP BY, HAVING 的用法区别详解 #### 一、概述 在SQL查询语言中,`ORDER BY`, `GROUP BY`, 和 `HAVING` 是三个非常重要的概念,它们分别用于对查询结果进行排序、分组以及在分组后进一步...
`GROUP BY` 语句是SQL中用于对数据进行分组的重要工具,通常与聚合函数如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`等一起使用。其基本概念是根据一个或多个列的值将数据分为不同的组,然后对每个组应用聚合函数以得出每...
HAVING COUNT(SNO) > (SELECT AVG(OrderCount) FROM (SELECT COUNT(SNO) AS OrderCount FROM orders GROUP BY CNO)); ``` 在这个例子中,我们首先在`HAVING`子句中使用了一个子查询来获取订单总数的平均值,然后用...
SQL中的`GROUP BY`语句是数据库查询中的一个重要部分,它用于将数据按照一个或多个列的值进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`和`MAX`等。下面我们将详细讨论`GROUP BY`的使用方法及其相关...
在Oracle数据库中,`GROUP BY`语句是用于将数据行根据一个或多个列的值进行分组,以便对每个组执行聚合函数(如`SUM`、`COUNT`、`AVG`等)。`GROUP BY`的主要作用在于将具有相同列值的数据归类到一起,从而可以对每...
1. GROUP BY基础:GROUP BY子句用于将数据集按照一个或多个列进行分组,以便对每个分组应用聚合函数(如COUNT、SUM、AVG、MAX、MIN等)。这在处理大量数据时,尤其在分析统计方面非常有用。 2. GROUP BY与聚合函数...
select * from user_num group by user having count(user) >= 2; ``` 在这个查询中,`GROUP BY`子句首先将数据按照`user`字段进行分组,然后`HAVING`子句在分组后的结果上进行筛选,找出`user`字段值出现次数大于...
`GROUP BY`子句通常与聚合函数(如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`)一起使用,用于计算每个组的汇总信息。例如,以下查询返回每个职位的最高薪水: ```sql SELECT job, MAX(sal) FROM emp GROUP BY job; ...
`GROUP BY`语句通常与聚合函数(如COUNT, SUM, AVG, MAX, MIN等)一起使用,用来根据一个或多个列的值将结果集分成不同的组。这样做的好处是可以更方便地对每一组的数据进行计算或统计分析。 #### 二、基本语法 `...
在SQL查询中,分组查询(GROUP BY)是一种强大的功能,它允许我们根据一个或多个字段将数据分组,然后对每个组应用聚合函数,如COUNT(), SUM(), AVG(), MAX(), 和 MIN(),来获取每个组的汇总信息。在Node.js的ORM...
在处理大型数据集时,GROUP BY 与聚合函数(如 SUM、COUNT、AVG、MAX 和 MIN)一起使用,能够帮助我们汇总数据,找出特定条件下的总体趋势和统计信息。 GROUP BY 语句的基本语法如下: ```sql SELECT column_name,...
标题 "ORA-00979 不是group by 表达式" 提及的是一个在使用SQL查询时常见的错误,通常出现在尝试执行聚合操作(如COUNT、SUM、AVG等)而没有正确指定GROUP BY子句的情况下。在SQL中,当你在SELECT语句中包含非聚合...
例如,`SELECT department, COUNT(employee_id), SUM(salary) FROM employees GROUP BY department` 将按部门统计员工数量和工资总额。GROUP BY 必须包含在 SELECT 语句的 WHERE 子句之后,且所有未使用聚合函数的...
在SQL查询中,`GROUP BY`和`HAVING`是两个非常重要的子句,它们用于数据的分组和过滤,特别是在处理聚合数据时。本文将深入解析这两个概念及其使用方法。 首先,`GROUP BY`子句是用于将数据集按照指定的列或表达式...