MySQL数据库COUNT和WHERE联合使用

MySQL数据库COUNT和WHERE联合使用,第1张

这几天学习《MySQL必知必会》发现有一句SQL语句有点绕,所以在这里记录以下,以免日后忘记。

现在由这样两张表,分别是orders表:

customers表:

然后执行以下SQL语句:

得到以下结果:

刚开始看到这个结果很疑惑,想的是子查询中的 COUNT() 不应该是输出一个值吗,为什么这里输出了一列值。其实这个原因很简单,这个子查询的条件是 orderscust_id = customerscust_id ,相当于将orders表中的cust_id与customers表中的 cust_id 比较,对于customers表中的每个 cust_id ,orders表都要比较一次,一共比较5次,所以有5条记录。

这样说可能还是比较绕,现在从简单的例子看起,我们最先开始学习WHERE语句的时候是这样的:

我们假设现在有一张名为user的表,根据 user_id=111 这个条件去检索,相当于把表中user_id这一列中的每一行数据都与111进行比较,如果相等,那就是要检索出的行。

回到问题,根据子查询语句 SELECT COUNT() FROM orders WHERE orderscust_id = customerscust_id 。我们可以拆解的来分析, 相当于customers表中的每个 cust_id 都是上述简单例子中的111,然后用orders表中的 cust_id 这一列去匹配,一共匹配5次,每一次过滤的结果再通过聚合函数 COUNT() 记录行数, 就得到一列别名为 orders 的数据为 2,0,1,1,1 ,最后在最外部的查询中,通过 ORDER BY 排序得到结果 2,1,0,1,1 。

其实书中已经为这个问题给出了解释,就在这个例子后的分析里面。

第一种select count() from tablename

第二种select id ,count() from table group by id;按id分组求

出现在select中的字段要出现在group by中

Count

返回集合中项目的数量(具体数目取决于集合)。

语法

维度

DimensionsCount

返回多维数据集中的维度数,其中包括 [Measures] 维度。

级别

«Dimension»|«Hierarchy»LevelsCount

返回维度或层次结构中的级别数,包括 [All] 级别(如果适用)。

集合 - 语法 1

Count(«Set»[, ExcludeEmpty | IncludeEmpty])

返回集合中的单元数。该语法允许分别使用 ExcludeEmpty 或 IncludeEmpty 标志来排除或包含空单元。

集合 - 语法 2

«Set»Count

返回集合中的单元数,其中包括空单元。

元组

«Tuple»Count

返回元组中的维度数。

说明 默认状态下计算空的单元数。默认情况下,OLE DB 中可比较的 Count 函数不包含空单元。

注释

若要从集合计数中排除空单元,请使用可选的 ExcludeEmpty 关键字。

示例

如果 Time 包含级别 Year 和 Month,Year 的成员是 1994 和 1995,那么下面的示例返回 24:

集合 - 示例 1

Count({TimeMonthMembers})

集合 - 示例 2

TimeMonthMembersCount

返回组中的项数。COUNT与COUNT_BIG函数类似。两个函数唯一的差别是它们的返回值。COUNT始终返回int数据类型值。COUNT_BIG始终返回bigint数据类型值。

Transact-SQL语法约定

语法

COUNT({[[ALL|DISTINCT]expression]|})

备注

COUNT()返回组中的项数。包括NULL值和重复项。

COUNT(ALLexpression)对组中的每一行都计算expression并返回非空值的数量。

COUNT(DISTINCTexpression)对组中的每一行都计算expression并返回唯一非空值的数量。

对于大于2^31-1的返回值,COUNT生成一个错误。这时应使用COUNT_BIG。

参数

ALL

对所有的值进行聚合函数运算。ALL是默认值。

DISTINCT

指定COUNT返回唯一非空值的数量。

expression

除text、image或ntext以外任何类型的表达式。不允许使用聚合函数和子查询。

指定应该计算所有行以返回表中行的总数。COUNT()不需要任何参数,而且不能与DISTINCT一起使用。COUNT()不需要expression参数,因为根据定义,该函数不使用有关任何特定列的信息。COUNT()返回指定表中行数而不删除副本。它对各行分别计数。包括包含空值的行。

重要事项:

使用CUBE或ROLLUP时,不支持区分聚合,如AVG(DISTINCTcolumn_name)、COUNT(DISTINCTcolumn_name)、MAX(DISTINCTcolumn_name)、MIN(DISTINCTcolumn_name)和SUM(DISTINCTcolumn_name)。如果使用这些聚合,MicrosoftSQLServer2005DatabaseEngine将返回一条错误消息并取消查询。

返回类型

int

示例

A使用COUNT和DISTINCT

以下示例列出了在AdventureWorksCycles工作的雇员可以拥有的不同标题的数量。

复制代码

USE;

GO

SELECTCOUNT(DISTINCTTitle)

FROMEmployee;

GO

下面是结果集:

复制代码

-----------

67

(1row(s)affected)

B使用COUNT()

以下示例计算AdventureWorksCycles的雇员总数。

复制代码

USE;

GO

SELECTCOUNT()

FROMEmployee;

GO

下面是结果集:

复制代码

-----------

290

(1row(s)affected)

C组合使用COUNT()和其他聚合函数

以下示例显示可以组合使用COUNT()和选择列表中的其他聚合函数。

复制代码

USE;

GO

SELECTCOUNT(),AVG(Bonus)

FROMSalesSalesPerson

WHERESalesQuota

GO

下面是结果集:

复制代码

--------------------------------

1434721428

(1row(s)affected)

返回组中的项数。COUNT 与 COUNT_BIG 函数类似。两个函数唯一的差别是它们的返回值。COUNT 始终返回 int 数据类型值。COUNT_BIG 始终返回 bigint 数据类型值。

Transact-SQL 语法约定

语法

COUNT ( { [ [ ALL | DISTINCT ] expression ] | } )

备注

COUNT() 返回组中的项数。包括 NULL 值和重复项。

COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。

COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。

对于大于 2^31-1 的返回值,COUNT 生成一个错误。这时应使用 COUNT_BIG。

参数

ALL

对所有的值进行聚合函数运算。ALL 是默认值。

DISTINCT

指定 COUNT 返回唯一非空值的数量。

expression

除 text、image 或 ntext 以外任何类型的表达式。不允许使用聚合函数和子查询。

指定应该计算所有行以返回表中行的总数。COUNT() 不需要任何参数,而且不能与 DISTINCT 一起使用。COUNT() 不需要 expression 参数,因为根据定义,该函数不使用有关任何特定列的信息。COUNT() 返回指定表中行数而不删除副本。它对各行分别计数。包括包含空值的行。

重要事项:

使用 CUBE 或 ROLLUP 时,不支持区分聚合,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用这些聚合,Microsoft SQL Server 2005 Database Engine 将返回一条错误消息并取消查询。

返回类型

int

示例

A 使用 COUNT 和 DISTINCT

以下示例列出了在 Adventure Works Cycles 工作的雇员可以拥有的不同标题的数量。

复制代码

USE AdventureWorks;

GO

SELECT COUNT(DISTINCT Title)

FROM HumanResourcesEmployee;

GO

下面是结果集:

复制代码

-----------

67

(1 row(s) affected)

B 使用 COUNT()

以下示例计算 Adventure Works Cycles 的雇员总数。

复制代码

USE AdventureWorks;

GO

SELECT COUNT()

FROM HumanResourcesEmployee;

GO

下面是结果集:

复制代码

-----------

290

(1 row(s) affected)

C 组合使用 COUNT() 和其他聚合函数

以下示例显示可以组合使用 COUNT() 和选择列表中的其他聚合函数。

复制代码

USE AdventureWorks;

GO

SELECT COUNT(), AVG(Bonus)

FROM SalesSalesPerson

WHERE SalesQuota > 25000;

GO

下面是结果集:

复制代码

----------- ---------------------

14 34721428

(1 row(s) affected)

sql语句中count,就是DELPHI中ADOrecordcount。

通过ADO实现步骤如下:

1、创建ADOQuery控件,并将sql写入ADOquery;

2、初使化ado,即close>>open,如有条件参数还需传入条件参数;

3、调用ADOrecordcount。

附实例代码如下图:

过多繁琐的sql影响代码质量,及维护成本,以下为两种小技巧处理方式,仅供参考。

第一种,用case ---when---方法

select id

,sum(case when type in (1,2) then [count] else 0 end) as sum1

,sum(case when type in (3) then [count] else 0 end) as sum2

,sum(case when type in (4,5) then [count] else 0 end) as sum3

from 表名

group by id

第二种,if 判断

SELECT   SUM( goods_amount ) AS money,

count( ) AS num,

count(if(pay_status=1,true,null)) AS success,

count(if(pay_status=2,true,null)) AS fall

FROM `tab_order_info`  

WHERE user_id = 11

select count() from (SELECT COUNT() as cnt FROM table名 GROUP BY uid ) a where acnt > 3

以上就是关于MySQL数据库COUNT和WHERE联合使用全部的内容,包括:MySQL数据库COUNT和WHERE联合使用、数据库中count(all 表达式)函数怎麽用啊、sql中,count的用法.等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9666150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存