Heim > Datenbank > MySQL-Tutorial > So fragen Sie die Menge in MySQL ab und zählen sie

So fragen Sie die Menge in MySQL ab und zählen sie

青灯夜游
Freigeben: 2021-12-10 17:55:42
Original
41866 Leute haben es durchsucht

In MySQL können Sie die SELECT-Anweisung verwenden, um Daten abzufragen, und die Funktion COUNT() verwenden, um die Anzahl der Abfrageergebnisse zu zählen. Die Syntax lautet „SELECT COUNT(*) FROM table name [...];“ „SELECT COUNT (Feldname) FROM Tabellenname[...];“.

So fragen Sie die Menge in MySQL ab und zählen sie

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.

In MySQL können Sie die SELECT-Anweisung zum Abfragen von Daten verwenden und die Funktion COUNT() verwenden, um die Anzahl der Abfrageergebnisse zu zählen.

SELECT Das Syntaxformat ist wie folgt:SELECT 的语法格式如下:

SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>…
[WHERE <表达式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]
Nach dem Login kopieren

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

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

  • <表 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;
Nach dem Login kopieren

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

+----+------+
| id | val  |
+----+------+
|  1 |    1 |
|  2 |    1 |
|  3 |    2 |
|  4 |    2 |
|  5 | NULL |
|  6 |    3 |
|  7 |    4 |
|  8 | NULL |
|  9 |    5 |
+----+------+
9 rows in set
Nach dem Login kopieren

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

mysql> SELECT COUNT(*) FROM demos;
+----------+
| COUNT(*) |
+----------+
|        9 |
+----------+
1 row in set
Nach dem Login kopieren

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

mysql> SELECT COUNT(*) FROM demos WHERE val = 2;
+----------+
| COUNT(*) |
+----------+
|        2 |
+----------+
1 row in set
Nach dem Login kopieren

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

SELECT COUNT(*) FROM demos WHERE val = 2;
Nach dem Login kopieren

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

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

SELECT COUNT(DISTINCT val) FROM demos;
Nach dem Login kopieren

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

mysql> SELECT COUNT(DISTINCT val) FROM demos;
+---------------------+
| COUNT(DISTINCT val) |
+---------------------+
|                   5 |
+---------------------+
1 row in set
Nach dem Login kopieren

在计数中忽略两个重复值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
Nach dem Login kopieren

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

SELECT productline, count(*) FROM products GROUP BY productline;
Nach dem Login kopieren

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

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
Nach dem Login kopieren

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

SELECT productvendor, count(*) FROM products GROUP BY productvendor;
Nach dem Login kopieren

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

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
Nach dem Login kopieren

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

SELECT productvendor, count(*) FROM products GROUP BY productvendor
HAVING count(*) >= 9;
Nach dem Login kopieren

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

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
Nach dem Login kopieren

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;
Nach dem Login kopieren

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

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
Nach dem Login kopieren

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

Unter diesen ist die Bedeutung jeder Klausel wie folgt:

  • {*|<Feldspaltenname>}Eine Feldliste mit dem Sternchen-Platzhalterzeichen, das den Namen des abzufragenden Felds angibt.
  • <Tabelle 1>, <Tabelle 2>…, Tabelle 1 und Tabelle 2 stellen die Quelle der Abfragedaten dar, die einzeln oder mehrfach sein können. 🎜
  • 🎜WHERE <Expression> ist optional. Wenn ausgewählt, müssen die Abfragedaten die Abfragebedingungen erfüllen. 🎜
  • 🎜GROUP BY< field >, diese Klausel teilt MySQL mit, wie die abgefragten Daten angezeigt und entsprechend dem angegebenen Feld gruppiert werden sollen. 🎜
  • 🎜[ORDER BY< field>], diese Klausel teilt MySQL mit, in welcher Reihenfolge die abgefragten Daten angezeigt werden sollen, die Sortierung ist aufsteigend (ASC) und Absteigend (DESC), standardmäßig aufsteigend. 🎜
  • 🎜[LIMIT[<offset>,]<row count>], diese Klausel weist MySQL an, jedes Mal die Anzahl der abgefragten Datenelemente anzuzeigen. 🎜
🎜🎜COUNT() Die Funktion zählt die Gesamtzahl der in der Datentabelle enthaltenen Datensatzzeilen oder gibt die Anzahl der in der Spalte enthaltenen Datenzeilen basierend auf zurück Abfrageergebnisse🎜
  • 🎜COUNT(*) Berechnen Sie die Gesamtzahl der Zeilen in der Tabelle, unabhängig davon, ob Eine Spalte hat einen Wert oder einen Nullwert. 🎜
  • 🎜COUNT(expression) Zählt die Anzahl der Zeilen, die keine NULL-Werte enthalten. 🎜
  • 🎜COUNT(DISTINCT expression) Gibt die Anzahl der eindeutigen Zeilen zurück, die keine NULL-Werte enthalten 🎜
🎜COUNT( )-Funktion Der Rückgabetyp ist BIGINT. Wenn keine passende Zeile gefunden wird, gibt die Funktion COUNT() 0 zurück. 🎜

MySQL COUNT-Beispiel

🎜Lassen Sie uns eine neue Tabelle mit dem Namen demo erstellen und einige Beispieldaten einfügen. 🎜rrreee🎜Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse: 🎜rrreee🎜Um alle Zeilen in der Tabelle demos zu zählen, verwenden Sie bitte die Funktion COUNT(*) unten gezeigt: 🎜rrreee🎜Sie können eine WHERE-Klausel hinzufügen, um eine zu zählende Bedingung anzugeben. Beispielsweise werden nur Zeilen gezählt, bei denen die Spalte val einen Wert enthält, der 2 verwenden Sie die folgende Abfrage: 🎜rrreee🎜Wenn eine Spalte val in der Funktion COUNT angegeben ist, wird die Funktion COUNT verwendet zählt seinen val >Spalte enthält nur alle Zeilen mit Nicht-NULL-Werten. Siehe folgende Abfrage: 🎜rrreee🎜 Zwei NULL-Werte in der Spalte val werden ignoriert. 🎜🎜Um eindeutige Zeilen in der Tabelle demos zu zählen, können Sie den Operator DISTINCT wie folgt zur Funktion COUNT hinzufügen: 🎜rrreee🎜 Ausführen Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse: 🎜rrreee🎜Ignorieren Sie die beiden doppelten Werte 1, 2 und die beiden NULL-Werte ​in der Zählung. 🎜

MySQL COUNT mit GROUP BY

🎜Wir verwenden häufig die Funktion COUNT mit GROUP BY-Klauseln werden zusammen verwendet, um Daten in verschiedenen Gruppen zu zählen. Sehen Sie sich die Struktur der products-Tabelle unten an – 🎜rrreee🎜 Um beispielsweise die Anzahl der Produkte in jeder Produktreihe zu ermitteln, können Sie die Funktion COUNT mit verwenden GROUP BYcode>-Klausel, wie in der folgenden Abfrage gezeigt: 🎜rrreee🎜Führen Sie den obigen Code aus und erhalten Sie die folgenden Ergebnisse: 🎜rrreee🎜Um die vom Lieferanten bereitgestellte Produktmenge zu ermitteln, verwenden Sie bitte die folgende Abfrage:🎜rrreee 🎜Führen Sie den obigen Code aus und erhalten Sie die folgenden Ergebnisse – 🎜 rrreee🎜Um herauszufinden, welcher Lieferant mindestens 9 Produkte anbietet, können Sie die HAVING-Klausel im COUNT verwenden -Funktion, wie in der folgenden Abfrageanzeige: 🎜rrreee🎜Führen Sie den obigen Code aus und erhalten Sie die folgenden Ergebnisse -🎜rrreee

MySQL COUNT IF

🎜 Sie können die Funktion COUNT verwenden. Kontrollflussfunktionen wie IF, IFNULL, CASE usw., um Zeilen zu zählen deren Werte mit der Bedingung übereinstimmen. 🎜🎜Zum Beispiel kann die folgende Abfrage ermitteln, wie viele stornierte, ausgesetzte und umstrittene Bestellungen es gibt: 🎜rrreee🎜Wenn Sie den obigen Code ausführen, erhalten Sie die folgenden Ergebnisse – 🎜rrreee🎜Wenn der Status der Bestellung storniert, reserviert oder umstritten ist, Die IF-Funktion gibt 1 zurück, andernfalls wird NULL zurückgegeben. Die Funktion COUNT zählt nur 1, keine NULL-Werte, daher gibt die Abfrage die Anzahl der Bestellungen basierend auf dem entsprechenden Status zurück. 🎜🎜【Verwandte Empfehlungen: 🎜MySQL-Video-Tutorial🎜】🎜

Das obige ist der detaillierte Inhalt vonSo fragen Sie die Menge in MySQL ab und zählen sie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage