日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql having in_MySQL having子句

發布時間:2024/9/20 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql having in_MySQL having子句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本教程中,您將學習如何使用MySQL HAVING子句為行分組或聚合組指定過濾條件。

MySQL HAVING子句簡介

在SELECT語句中使用HAVING子句來指定一組行或聚合的過濾條件。

HAVING子句通常與GROUP BY子句一起使用,以根據指定的條件過濾分組。如果省略GROUP BY子句,則HAVING子句的行為與WHERE子句類似。

請注意,HAVING子句將過濾條件應用于每組分行,而WHERE子句將過濾條件應用于每個單獨的行。

MySQL HAVING子句示例

讓我們舉一些使用HAVING子句的例子來看看它是如何工作。 我們將使用示例數據庫(yiibaidb)中的orderdetails表進行演示。

mysql> desc orderdetails;

+-----------------+---------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------------+---------------+------+-----+---------+-------+

| orderNumber | int(11) | NO | PRI | NULL | |

| productCode | varchar(15) | NO | PRI | NULL | |

| quantityOrdered | int(11) | NO | | NULL | |

| priceEach | decimal(10,2) | NO | | NULL | |

| orderLineNumber | smallint(6) | NO | | NULL | |

+-----------------+---------------+------+-----+---------+-------+

5 rows in set

可以使用GROUP BY子句來獲取訂單號,查看每個訂單銷售的商品數量和每個銷售總額:

SELECT

ordernumber,

SUM(quantityOrdered) AS itemsCount,

SUM(priceeach*quantityOrdered) AS total

FROM

orderdetails

GROUP BY ordernumber;

執行上面查詢語句,得到以下結果(部分) -

+-------------+------------+----------+

| ordernumber | itemsCount | total |

+-------------+------------+----------+

| 10100 | 151 | 10223.83 |

| 10101 | 142 | 10549.01 |

| 10102 | 80 | 5494.78 |

| 10103 | 541 | 50218.95 |

| 10104 | 443 | 40206.20 |

| 10105 | 545 | 53959.21 |

| 10106 | 675 | 52151.81 |

| ------- 這里省略了一大波數據 ---------|

| ........ ........... |

| 10421 | 75 | 7639.10 |

| 10422 | 76 | 5849.44 |

| 10423 | 111 | 8597.73 |

| 10424 | 269 | 29310.30 |

| 10425 | 427 | 41623.44 |

+-------------+------------+----------+

326 rows in set

現在,可以通過使用HAVING子句查詢(過濾)哪些訂單的總銷售額大于55000,如下所示:

SELECT

ordernumber,

SUM(quantityOrdered) AS itemsCount,

SUM(priceeach*quantityOrdered) AS total

FROM

orderdetails

GROUP BY ordernumber

HAVING total > 55000;

執行上面查詢語句,得到以下結果 -

+-------------+------------+----------+

| ordernumber | itemsCount | total |

+-------------+------------+----------+

| 10126 | 617 | 57131.92 |

| 10127 | 540 | 58841.35 |

| 10135 | 607 | 55601.84 |

| 10142 | 577 | 56052.56 |

| 10165 | 670 | 67392.85 |

| 10181 | 522 | 55069.55 |

| 10192 | 585 | 55425.77 |

| 10204 | 619 | 58793.53 |

| 10207 | 615 | 59265.14 |

| 10212 | 612 | 59830.55 |

| 10222 | 717 | 56822.65 |

| 10287 | 595 | 61402.00 |

| 10310 | 619 | 61234.67 |

| 10312 | 601 | 55639.66 |

| 10390 | 603 | 55902.50 |

+-------------+------------+----------+

可以使用邏輯運算符(如OR和AND)在HAVING子句中構造復雜過濾條件。 假設您想查找哪些訂單的總銷售額大于50000,并且包含超過600個項目,則可以使用以下查詢:

SELECT

ordernumber,

SUM(quantityOrdered) AS itemsCount,

SUM(priceeach*quantityOrdered) AS total

FROM

orderdetails

GROUP BY ordernumber

HAVING total > 50000 AND itemsCount > 600;

執行上面查詢語句,得到以下結果 -

+-------------+------------+----------+

| ordernumber | itemsCount | total |

+-------------+------------+----------+

| 10106 | 675 | 52151.81 |

| 10126 | 617 | 57131.92 |

| 10135 | 607 | 55601.84 |

| 10165 | 670 | 67392.85 |

| 10168 | 642 | 50743.65 |

| 10204 | 619 | 58793.53 |

| 10207 | 615 | 59265.14 |

| 10212 | 612 | 59830.55 |

| 10222 | 717 | 56822.65 |

| 10310 | 619 | 61234.67 |

| 10312 | 601 | 55639.66 |

| 10360 | 620 | 52166.00 |

| 10390 | 603 | 55902.50 |

| 10414 | 609 | 50806.85 |

+-------------+------------+----------+

假設您想查找所有已發貨(status='Shiped')的訂單和總銷售額大于55000的訂單,可以使用INNER JOIN子句將orders表與orderdetails表一起使用,并在status列和總金額(total)列上應用條件,如以下查詢所示:

SELECT

a.ordernumber, status, SUM(priceeach*quantityOrdered) total

FROM

orderdetails a

INNER JOIN

orders b ON b.ordernumber = a.ordernumber

GROUP BY ordernumber, status

HAVING status = 'Shipped' AND total > 5000;

執行上面查詢,得到以下結果 -

+-------------+---------+----------+

| ordernumber | status | total |

+-------------+---------+----------+

| 10126 | Shipped | 57131.92 |

| 10127 | Shipped | 58841.35 |

| 10135 | Shipped | 55601.84 |

| 10142 | Shipped | 56052.56 |

| 10165 | Shipped | 67392.85 |

| 10181 | Shipped | 55069.55 |

| 10192 | Shipped | 55425.77 |

| 10204 | Shipped | 58793.53 |

| 10207 | Shipped | 59265.14 |

| 10212 | Shipped | 59830.55 |

| 10222 | Shipped | 56822.65 |

| 10287 | Shipped | 61402.00 |

| 10310 | Shipped | 61234.67 |

| 10312 | Shipped | 55639.66 |

| 10390 | Shipped | 55902.50 |

+-------------+---------+----------+

HAVING子句僅在使用GROUP BY子句生成高級報告的輸出時才有用。 例如,您可以使用HAVING子句來回答統計問題,例如在本月,本季度或今年總銷售額超過10000的訂單。

在本教程中,您已經學習了如何使用具有GROUP BY子句的MySQL HAVING子句為行分組或聚合分組指定過濾器條件。

¥ 我要打賞

糾錯/補充

收藏

加QQ群啦,易百教程官方技術學習群

注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。

總結

以上是生活随笔為你收集整理的mysql having in_MySQL having子句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。