Dans MySQL, vous pouvez utiliser l'instruction SELECT pour interroger des données et utiliser la fonction COUNT() pour compter le nombre de résultats de requête. La syntaxe est "SELECT COUNT(*) FROM table name [...];" "SELECT COUNT (nom du champ) FROM nom de la table [...];".
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Dans MySQL, vous pouvez utiliser l'instruction SELECT pour interroger des données et utiliser la fonction COUNT() pour compter le nombre de résultats de requête.
SELECT
Le format de syntaxe est le suivant :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
。
我们来创建一个名为demo
的新表,并插入一些示例数据。
USE testdb; -- create a demos table CREATE TABLE IF NOT EXISTS demos( id int auto_increment primary key, val int ); -- insert some sample data INSERT INTO demos(val) VALUES(1),(1),(2),(2),(NULL),(3),(4),(NULL),(5); -- select data from demos table SELECT * 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
值。
我们经常将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 productvendor HAVING count(*) >= 9;
执行上面代码,得到以下结果 -
mysql> SELECT productvendor, count(*) FROM products GROUP BY productvendor HAVING 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
可以使用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
rrreee
{*|<Nom de la colonne du champ>}
Une liste de champs contenant le caractère générique astérisque, indiquant le nom du champ à interroger. <Table 1>, <Table 2>…
, Tableau 1 et Tableau 2 représentent la source des données de requête, qui peuvent être simples ou multiples. 🎜WHERE <Expression>
est facultatif. Si cette option est sélectionnée, les données de la requête doivent répondre aux conditions de la requête. 🎜GROUP BY< field >
, cette clause indique à MySQL comment afficher les données interrogées et les regrouper en fonction du champ spécifié. 🎜[ORDER BY< field>]
, cette clause indique à MySQL dans quel ordre afficher les données interrogées, le tri qui peut être effectué est par ordre croissant (ASC) et Descendant (DESC), qui est ascendant par défaut. 🎜[LIMIT[<offset>,]<row count>]
, cette clause indique à MySQL d'afficher le nombre d'éléments de données interrogés à chaque fois. 🎜COUNT()
La fonction compte le nombre total de lignes d'enregistrement contenues dans la table de données, ou renvoie le nombre de lignes de données contenues dans la colonne en fonction du résultats de la requête🎜 COUNT(*)
Calculez le nombre total de lignes dans le tableau, que ce soit une colonne a une valeur ou une valeur nulle. 🎜COUNT(expression)
Compte le nombre de lignes qui ne contiennent pas de valeurs NULL
. 🎜COUNT(DISTINCT expression)
Renvoie le nombre de lignes uniques qui ne contiennent pas de valeurs NULL
🎜BIGINT
. Si aucune ligne correspondante n'est trouvée, la fonction COUNT() renvoie 0
. 🎜demo
et insérons quelques exemples de données. 🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants : 🎜rrreee🎜Pour compter toutes les lignes de la table demos
, veuillez utiliser la fonction COUNT(*)
, comme montré ci-dessous : 🎜rrreee🎜Vous pouvez ajouter une clause WHERE
pour spécifier une condition à compter, par exemple, compter uniquement les lignes où la colonne val
contient une valeur égale à 2
, utilisez la requête suivante : 🎜rrreee🎜Si une colonne val
est spécifiée dans la fonction COUNT
, la fonction COUNT
compte que sa val
>Column contient uniquement toutes les lignes avec des valeurs non NULL
. Voir la requête suivante : 🎜rrreee🎜 Deux valeurs NULL
dans la colonne val
seront ignorées. 🎜🎜Pour compter les lignes uniques dans la table demos
, vous pouvez ajouter l'opérateur DISTINCT
à la fonction COUNT
, comme suit : 🎜rrreee🎜 Exécuter l'instruction de requête ci-dessus et obtenez les résultats suivants : 🎜rrreee🎜Ignorez les deux valeurs en double 1
, 2
et les deux valeurs NULL
dans le décompte. 🎜COUNT
avec GROUP BY
les clauses sont utilisées ensemble pour compter les données dans différents groupes. Voir la structure du tableau produits
ci-dessous - 🎜rrreee🎜 Par exemple, pour trouver le nombre de produits dans chaque gamme de produits, vous pouvez utiliser la fonction COUNT
avec GROUP BY
code>, comme indiqué dans la requête suivante : 🎜rrreee🎜Exécutez le code ci-dessus et obtenez les résultats suivants -🎜rrreee🎜Pour trouver la quantité de produit fournie par le fournisseur, veuillez utiliser la requête suivante :🎜rrreee 🎜Exécutez le code ci-dessus et obtenez les résultats suivants -🎜 rrreee🎜Pour trouver quel fournisseur propose au moins 9
produits, vous pouvez utiliser la clause HAVING
dans le COUNT
, comme dans la requête suivante Afficher : 🎜rrreee🎜Exécutez le code ci-dessus et obtenez les résultats suivants -🎜rrreeeCOUNT
Les fonctions de flux de contrôle telles que IF
, IFNULL
, CASE
, etc. pour compter les lignes dont les valeurs correspondent à la condition. 🎜🎜Par exemple, la requête suivante permet de connaître le nombre de commandes annulées, suspendues et contestées : 🎜rrreee🎜En exécutant le code ci-dessus, vous obtenez les résultats suivants - 🎜rrreee🎜Si le statut de la commande est annulé, réservé ou contesté, le La fonction IF renverra 1
, sinon NULL
est renvoyé. La fonction COUNT
ne compte que les valeurs 1
, pas les valeurs NULL
, donc la requête renvoie le nombre de commandes en fonction du statut correspondant. 🎜🎜【Recommandations associées : 🎜tutoriel vidéo mysql🎜】🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!