本教程操作环境:windows7系统、mysql8版本、dell g3电脑。
在mysql中,可以使用select语句查询数据,并利用count()函数统计查询结果的数量。
select 的语法格式如下:
select{* | <字段列名>}[from <表 1>, <表 2>…[where <表达式>[group by <group by definition>[having <expression> [{<operator> <expression>}…]][order by <order by definition>][limit[<offset>,] <row count>]]
其中,各条子句的含义如下:
{*|<字段列名>}包含星号通配符的字段列表,表示所要查询字段的名称。
<表 1>,<表 2>…,表 1 和表 2 表示查询数据的来源,可以是单个或多个。
where <表达式>是可选项,如果选择该项,将限定查询数据必须满足该查询条件。
group by< 字段 >,该子句告诉 mysql 如何显示查询出来的数据,并按照指定的字段分组。
[order by< 字段 >],该子句告诉 mysql 按什么样的顺序显示查询出来的数据,可以进行的排序有升序(asc)和降序(desc),默认情况下是升序。
[limit[<offset>,]<row count>],该子句告诉 mysql 每次显示查询出来的数据条数。
count() 函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数
count(*) 计算表中总的行数,无论某列有数值或者为空值。
count(表达式) 计算不包含null值的行数。
count(distinct 表达式) 返回不包含null值的唯一行数
count()函数的返回类型为bigint。 如果没有找到匹配的行,则count()函数返回0。
mysql count示例我们来创建一个名为demo的新表,并插入一些示例数据。
use testdb;-- create a demos tablecreate table if not exists demos( id int auto_increment primary key, val int );-- insert some sample datainsert into demos(val)values(1),(1),(2),(2),(null),(3),(4),(null),(5);-- select data from demos tableselect * from demos;
执行上面查询语句,得到以下结果 -
+----+------+| id | val |+----+------+| 1 | 1 || 2 | 1 || 3 | 2 || 4 | 2 || 5 | null || 6 | 3 || 7 | 4 || 8 | null || 9 | 5 |+----+------+9 rows in set
要计算demos表中的所有行,请使用count(*)函数,如下所示:
mysql> select count(*) from demos;+----------+| count(*) |+----------+| 9 |+----------+1 row in set
您可以添加一个where子句来指定一个条件来计数,例如,只计算val列包含值等于2的行,使用以下查询:
mysql> select count(*) from demos where val = 2;+----------+| count(*) |+----------+| 2 |+----------+1 row in set
如果在count函数中指定val列,则count函数计数其val列仅包含非null值的所有行。 请参阅以下查询:
select count(*) from demos where val = 2;
val列中的两个null值将被忽略。
要计算demos表中的唯一行,可以将distinct运算符添加到count函数中,如下查询语句:
select count(distinct val) from demos;
执行上面查询语句,得到以下结果 -
mysql> select count(distinct val) from demos;+---------------------+| count(distinct val) |+---------------------+| 5 |+---------------------+1 row in set
在计数中忽略两个重复值1,2和两个null值。
具有group by的mysql count我们经常将count函数与group by子句结合使用来统计不同分组中的数据。请参见以下products表的结构 -
mysql> desc products;+--------------------+---------------+------+-----+---------+------------------+| field | type | null | key | default | extra |+--------------------+---------------+------+-----+---------+------------------+| productcode | varchar(15) | no | pri | | || productname | varchar(70) | no | mul | null | || productline | varchar(50) | no | mul | null | || productscale | varchar(10) | no | | null | || productvendor | varchar(50) | no | | null | || productdescription | text | no | | null | || quantityinstock | smallint(6) | no | | null | || buyprice | decimal(10,2) | no | | null | || msrp | decimal(10,2) | no | | null | || stockvalue | double | yes | | null | stored generated |+--------------------+---------------+------+-----+---------+------------------+10 rows in set
例如,要查找每个产品系列中的产品数量,可以使用count函数与group by子句,如下查询所示:
select productline, count(*) from products group by productline;
执行上面代码,得到以下结果 -
mysql> select productline, count(*) from products group by productline;+------------------+----------+| productline | count(*) |+------------------+----------+| classic cars | 38 || motorcycles | 13 || planes | 12 || ships | 9 || trains | 3 || trucks and buses | 11 || vintage cars | 24 |+------------------+----------+7 rows in set
要查找供应商提供的产品数量,请使用以下查询:
select productvendor, count(*) from products group by productvendor;
执行上面代码,得到以下结果 -
mysql> select productvendor, count(*) from products group by productvendor;+---------------------------+----------+| productvendor | count(*) |+---------------------------+----------+| autoart studio design | 8 || carousel diecast legends | 9 || classic metal creations | 10 || exoto designs | 9 || gearbox collectibles | 9 || highway 66 mini classics | 9 || min lin diecast | 8 || motor city art classics | 9 || red start diecast | 7 || second gear diecast | 8 || studio m art models | 8 || unimax art galleries | 8 || welly diecast productions | 8 |+---------------------------+----------+13 rows in set
要查找哪个供应商提供至少9个产品,您可以使用having子句在count函数中,如以下查询语句所示:
select productvendor, count(*) from products group by productvendorhaving count(*) >= 9;
执行上面代码,得到以下结果 -
mysql> select productvendor, count(*) from products group by productvendorhaving count(*) >= 9;+--------------------------+----------+| productvendor | count(*) |+--------------------------+----------+| carousel diecast legends | 9 || classic metal creations | 10 || exoto designs | 9 || gearbox collectibles | 9 || highway 66 mini classics | 9 || motor city art classics | 9 |+--------------------------+----------+6 rows in set
mysql count if可以使用count函数中的控制流程功能,例如if,ifnull,case等来计数其值与条件匹配的行。
例如,以下查询可以查找有多少被取消,暂停和有争议的订单:
select count(if(status='cancelled',1, null)) 'cancelled', count(if(status='on hold',1, null)) 'on hold', count(if(status='disputed',1, null)) 'disputed'from orders;
执行上面代码,得到以下结果 -
mysql> select count(if(status='cancelled',1, null)) 'cancelled', count(if(status='on hold',1, null)) 'on hold', count(if(status='disputed',1, null)) 'disputed'from orders;+-----------+---------+----------+| cancelled | on hold | disputed |+-----------+---------+----------+| 6 | 4 | 3 |+-----------+---------+----------+1 row in set
如果订单的状态被取消,保留或有争议,if函数将返回1,否则返回null。 count函数只计数1,而不是null值,因此查询根据相应的状态返回订单数。
【相关推荐:mysql视频教程】
以上就是mysql怎么查询并统计数量的详细内容。