`
talentluke
  • 浏览: 606568 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

count,having,sum,group by

 
阅读更多

假设表的字段为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等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 





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(主键)速度一样。
分享到:
评论
1 楼 行者有疆 2013-08-24  

相关推荐

    SQL问题详解之_having_Group by

    在上面的第二个SQL实例中,`SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region HAVING SUM(area)>1000000`将显示那些总面积超过1000000的地区的总人口和总面积。由于WHERE子句无法处理聚合函数的...

    order by 、group by 、having的用法

    - `GROUP BY` 主要用于数据分组,将具有相同字段值的数据组合在一起,通常与聚合函数(如 `SUM`、`COUNT`、`AVG`、`MAX`、`MIN`)一起使用,以计算每个组的统计信息。 - 当使用 `GROUP BY` 时,`SELECT` 语句中未...

    order_by_、group_by_、having的用法

    2. `GROUP BY`:这是用于分组数据的关键字,常与聚合函数(如SUM、COUNT、AVG等)一起使用。当你需要根据某个字段的值对数据进行分类并计算每个类别的总和、平均值等时,就会用到`GROUP BY`。例如,`SELECT ...

    order_by_、group_by_、having的用法区别.doc

    ### SQL中的ORDER BY, GROUP BY, HAVING 的用法区别详解 #### 一、概述 在SQL查询语言中,`ORDER BY`, `GROUP BY`, 和 `HAVING` 是三个非常重要的概念,它们分别用于对查询结果进行排序、分组以及在分组后进一步...

    group by用法.doc

    `GROUP BY` 语句是SQL中用于对数据进行分组的重要工具,通常与聚合函数如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`等一起使用。其基本概念是根据一个或多个列的值将数据分为不同的组,然后对每个组应用聚合函数以得出每...

    sql/having用法

    HAVING COUNT(SNO) > (SELECT AVG(OrderCount) FROM (SELECT COUNT(SNO) AS OrderCount FROM orders GROUP BY CNO)); ``` 在这个例子中,我们首先在`HAVING`子句中使用了一个子查询来获取订单总数的平均值,然后用...

    简单讲解sql语句中的group by的使用方法

    SQL中的`GROUP BY`语句是数据库查询中的一个重要部分,它用于将数据按照一个或多个列的值进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`和`MAX`等。下面我们将详细讨论`GROUP BY`的使用方法及其相关...

    group by的详解

    在Oracle数据库中,`GROUP BY`语句是用于将数据行根据一个或多个列的值进行分组,以便对每个组执行聚合函数(如`SUM`、`COUNT`、`AVG`等)。`GROUP BY`的主要作用在于将具有相同列值的数据归类到一起,从而可以对每...

    《Pro Oracle SQL》Chapter7--7.10GROUP BY Restrictions

    1. GROUP BY基础:GROUP BY子句用于将数据集按照一个或多个列进行分组,以便对每个分组应用聚合函数(如COUNT、SUM、AVG、MAX、MIN等)。这在处理大量数据时,尤其在分析统计方面非常有用。 2. GROUP BY与聚合函数...

    sql中count或sum为条件的查询示例(sql查询count)

    select * from user_num group by user having count(user) >= 2; ``` 在这个查询中,`GROUP BY`子句首先将数据按照`user`字段进行分组,然后`HAVING`子句在分组后的结果上进行筛选,找出`user`字段值出现次数大于...

    Oracle中分组查询group by用法规则详解

    `GROUP BY`子句通常与聚合函数(如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`)一起使用,用于计算每个组的汇总信息。例如,以下查询返回每个职位的最高薪水: ```sql SELECT job, MAX(sal) FROM emp GROUP BY job; ...

    group by 语法大全,内附列子

    `GROUP BY`语句通常与聚合函数(如COUNT, SUM, AVG, MAX, MIN等)一起使用,用来根据一个或多个列的值将结果集分成不同的组。这样做的好处是可以更方便地对每一组的数据进行计算或统计分析。 #### 二、基本语法 `...

    Sequelize中用group by进行分组聚合查询

    在SQL查询中,分组查询(GROUP BY)是一种强大的功能,它允许我们根据一个或多个字段将数据分组,然后对每个组应用聚合函数,如COUNT(), SUM(), AVG(), MAX(), 和 MIN(),来获取每个组的汇总信息。在Node.js的ORM...

    SQL GROUP BY 语句详解

    在处理大型数据集时,GROUP BY 与聚合函数(如 SUM、COUNT、AVG、MAX 和 MIN)一起使用,能够帮助我们汇总数据,找出特定条件下的总体趋势和统计信息。 GROUP BY 语句的基本语法如下: ```sql SELECT column_name,...

    ORA-00979 不是group by 表达式

    标题 "ORA-00979 不是group by 表达式" 提及的是一个在使用SQL查询时常见的错误,通常出现在尝试执行聚合操作(如COUNT、SUM、AVG等)而没有正确指定GROUP BY子句的情况下。在SQL中,当你在SELECT语句中包含非聚合...

    Mysql中order by、group by、having的区别深入分析

    例如,`SELECT department, COUNT(employee_id), SUM(salary) FROM employees GROUP BY department` 将按部门统计员工数量和工资总额。GROUP BY 必须包含在 SELECT 语句的 WHERE 子句之后,且所有未使用聚合函数的...

    深入浅析SQL中的group by 和 having 用法

    在SQL查询中,`GROUP BY`和`HAVING`是两个非常重要的子句,它们用于数据的分组和过滤,特别是在处理聚合数据时。本文将深入解析这两个概念及其使用方法。 首先,`GROUP BY`子句是用于将数据集按照指定的列或表达式...

Global site tag (gtag.js) - Google Analytics