Maison > base de données > tutoriel mysql > Comment interroger et compter la quantité dans MySQL

Comment interroger et compter la quantité dans MySQL

青灯夜游
Libérer: 2021-12-10 17:55:42
original
41868 Les gens l'ont consulté

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 [...];".

Comment interroger et compter la quantité dans MySQL

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>]
]
Copier après la connexion

其中,各条子句的含义如下:

  • {*|<字段列名>}包含星号通配符的字段列表,表示所要查询字段的名称。

  • <表 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 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;
Copier après la connexion

执行上面查询语句,得到以下结果 -

+----+------+
| id | val  |
+----+------+
|  1 |    1 |
|  2 |    1 |
|  3 |    2 |
|  4 |    2 |
|  5 | NULL |
|  6 |    3 |
|  7 |    4 |
|  8 | NULL |
|  9 |    5 |
+----+------+
9 rows in set
Copier après la connexion

要计算demos表中的所有行,请使用COUNT(*)函数,如下所示:

mysql> SELECT COUNT(*) FROM demos;
+----------+
| COUNT(*) |
+----------+
|        9 |
+----------+
1 row in set
Copier après la connexion

您可以添加一个WHERE子句来指定一个条件来计数,例如,只计算val列包含值等于2的行,使用以下查询:

mysql> SELECT COUNT(*) FROM demos WHERE val = 2;
+----------+
| COUNT(*) |
+----------+
|        2 |
+----------+
1 row in set
Copier après la connexion

如果在COUNT函数中指定val列,则COUNT函数计数其val列仅包含非NULL值的所有行。 请参阅以下查询:

SELECT COUNT(*) FROM demos WHERE val = 2;
Copier après la connexion

val列中的两个NULL值将被忽略。

要计算demos表中的唯一行,可以将DISTINCT运算符添加到COUNT函数中,如下查询语句:

SELECT COUNT(DISTINCT val) FROM demos;
Copier après la connexion

执行上面查询语句,得到以下结果 -

mysql> SELECT COUNT(DISTINCT val) FROM demos;
+---------------------+
| COUNT(DISTINCT val) |
+---------------------+
|                   5 |
+---------------------+
1 row in set
Copier après la connexion

在计数中忽略两个重复值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
Copier après la connexion

例如,要查找每个产品系列中的产品数量,可以使用COUNT函数与GROUP BY子句,如下查询所示:

SELECT productline, count(*) FROM products GROUP BY productline;
Copier après la connexion

执行上面代码,得到以下结果 -

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
Copier après la connexion

要查找供应商提供的产品数量,请使用以下查询:

SELECT productvendor, count(*) FROM products GROUP BY productvendor;
Copier après la connexion

执行上面代码,得到以下结果 -

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
Copier après la connexion

要查找哪个供应商提供至少9个产品,您可以使用HAVING子句在COUNT函数中,如以下查询语句所示:

SELECT productvendor, count(*) FROM products GROUP BY productvendor
HAVING count(*) >= 9;
Copier après la connexion

执行上面代码,得到以下结果 -

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
Copier après la connexion

MySQL COUNT IF

可以使用COUNT函数中的控制流程功能,例如IFIFNULLCASE等来计数其值与条件匹配的行。

例如,以下查询可以查找有多少被取消,暂停和有争议的订单:

SELECT COUNT(IF(status=&#39;Cancelled&#39;,1, NULL)) &#39;Cancelled&#39;,
       COUNT(IF(status=&#39;On Hold&#39;,1, NULL)) &#39;On Hold&#39;,
       COUNT(IF(status=&#39;Disputed&#39;,1, NULL)) &#39;Disputed&#39;
FROM orders;
Copier après la connexion

执行上面代码,得到以下结果 -

mysql> SELECT COUNT(IF(status=&#39;Cancelled&#39;,1, NULL)) &#39;Cancelled&#39;,
       COUNT(IF(status=&#39;On Hold&#39;,1, NULL)) &#39;On Hold&#39;,
       COUNT(IF(status=&#39;Disputed&#39;,1, NULL)) &#39;Disputed&#39;
FROM orders;
+-----------+---------+----------+
| Cancelled | On Hold | Disputed |
+-----------+---------+----------+
|         6 |       4 |        3 |
+-----------+---------+----------+
1 row in set
Copier après la connexion

如果订单的状态被取消,保留或有争议,IF函数将返回1,否则返回NULLCOUNT函数只计数1,而不是NULLrrreee

Parmi eux, la signification de chaque clause est la suivante :

  • {*|<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 🎜
Le type de retour de la fonction >🎜COUNT( ) est BIGINT. Si aucune ligne correspondante n'est trouvée, la fonction COUNT() renvoie 0. 🎜

Exemple MySQL COUNT

🎜Créons une nouvelle table nommée 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. 🎜

MySQL COUNT avec GROUP BY

🎜Nous utilisons souvent la fonction 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 BYcode>, 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 -🎜rrreee

MySQL COUNT IF

🎜 Vous pouvez utiliser la fonction COUNT 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal