欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql中where與having的區(qū)別實例詳解

 更新時間:2023年01月09日 15:19:45   作者:菜鳥教程*…*  
當SQL語句中使用聚合函數,然后又需要對聚合函數的記錄集進行篩選過濾時,這個時候就需要用到Having子句,下面這篇文章主要給大家介紹了關于Mysql中where與having區(qū)別的相關資料,需要的朋友可以參考下

以一道題來做引子

??停琒QL30 計算總和

OrderItems表代表訂單信息,包括字段:訂單號order_num和item_price商品售出價格、quantity商品數量。

order_num

item_price

quantity

a1

10

105

a2

1

1100

a3

1

200

a4

2

1121

a5

5

10

a6

1

19

a7

7

5

【問題】編寫 SQL 語句,根據訂單號聚合,返回訂單總價不小于1000 的所有訂單號,最后的結果按訂單號進行升序排序。

提示:總價 = item_price 乘以 quantity

order_num

total_price

a1

1050

a2

1319

a4

2242

先來看一看錯誤的寫法:

select order_num, sum(item_price*quantity) total_price
from OrderItems
group by order_num
where total_price >= 1000
order by order_num

錯誤:SQL_ERROR_INFO: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where total_price >= 1000\norder by order_num' at line 4"

上述的錯誤為:非法使用聚合函數,不能在 WHERE 子句中使用聚合函數

我們的 total_price等價于sum(item_price*quantity),而在WHERE 子句中使用聚合函數

改錯

select order_num, sum(item_price*quantity) total_price
from OrderItems
group by order_num
having total_price >= 1000
order by order_num

這樣就對了

使用having時注意:

1. 行已經被分組。

2. 使用了聚合函數。

3. 滿足HAVING 子句中條件的分組將被顯示。

4. HAVING 不能單獨使用,必須要跟 GROUP BY 一起使用。

那么和where的區(qū)別有以下幾點:

1. WHERE 可以直接使用表中的字段作為篩選條件,但不能使用分組中的計算函數作為篩選條件; HAVING 必須要與 GROUP BY 配合使用,可以把分組計算的函數和分組字段作為篩選條件。

2. 如果需要通過連接從關聯表中獲取需要的數據,WHERE 是先篩選后連接,而 HAVING 是先連接 后篩選。

3. 第二項導致了WHERE執(zhí)行效率高,不能使用分組中的計算函數進行篩選,而HAVING 可以使用分組中的計算函數,執(zhí)行效率較低。

where、聚合函數、having在from后面的執(zhí)行順序:

where > 聚合函數 > having

若需要對聚合函數對group by的結果進行過濾,只能使用having。Having語句通常與Group by語句聯合使用,用來過濾Group by語句返回的結果集,Having語句的存在彌補了Where關鍵字不能與聚合函數聯合使用的不足。

例如:查詢平均成績大于60分的同學的學號和平均成績

select s_id, AVG(s_score) s_avg from Score group by s_id Having AVG(s_score) > 60;

也可以寫成如下形式:

select s_id, AVG(s_score) s_avg from Score group by s_id Having s_avg > 60;

如果將Having改成where 就會報錯,因為where的執(zhí)行順序大于聚合函數。

總結

到此這篇關于Mysql中where與having區(qū)別的文章就介紹到這了,更多相關Mysql where與having區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL單表恢復的步驟

    MySQL單表恢復的步驟

    這篇文章主要介紹了MySQL單表恢復的步驟,幫助大家更好的理解和學習MySQL,感興趣的朋友可以了解下
    2020-08-08
  • MySQL 游標的作用與使用相關

    MySQL 游標的作用與使用相關

    這篇文章主要介紹了MySQL游標的相關資料,幫助大家更好的理解和使用MySQL數據庫,感興趣的朋友可以了解下
    2021-01-01
  • 深入探究MySQL事務實現原理

    深入探究MySQL事務實現原理

    數據庫事務是指一組數據庫操作,這些操作必須被視為一個不可分割的單元,要么全部執(zhí)行成功,要么全部失敗回滾,本文詳細的給大家介紹了MySQL事務的實現原理,對我們學習MySQL有一定的幫助,感興趣的同學可以跟著小編一起來探究
    2023-06-06
  • Mysql主鍵和唯一鍵的區(qū)別點總結

    Mysql主鍵和唯一鍵的區(qū)別點總結

    在本篇文章中小編給大家分享了關于Mysql主鍵和唯一鍵的區(qū)別,有興趣的朋友們學習下吧。
    2019-02-02
  • 數據庫中GROUP?BY語句詳解、示例、注意事項

    數據庫中GROUP?BY語句詳解、示例、注意事項

    在Oracle數據庫中GROUP?BY是用于對結果集進行分組的一個關鍵字,這篇文章主要給大家介紹了關于數據庫中GROUP?BY語句詳解、示例、注意事項的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • Mysql 5.7.9 shutdown 語法實例詳解

    Mysql 5.7.9 shutdown 語法實例詳解

    之前如果想關閉一個mysql數據庫可以通過kill 命令、mysqladmin shutdown 、service mysqld stop 等這樣的方式。然而在mysql-5.7.9之后mysql終于提供了SQL接口的shutdown語法啦
    2017-06-06
  • 深入探究MySQL中使用where 1=1是否存在性能影響

    深入探究MySQL中使用where 1=1是否存在性能影響

    最近在項目中使用 mybatis 寫 SQL 使用了 where 1=1 來簡化多條件拼接的寫法,案例如下,借此聊聊多條件拼接的常見的一些寫法以及 where 1=1 是否存在性能影響,需要的朋友可以參考下
    2024-02-02
  • MySQL用戶權限驗證與管理方法詳解

    MySQL用戶權限驗證與管理方法詳解

    這篇文章主要介紹了MySQL用戶權限驗證與管理方法,結合實例形式詳細分析了mysql針對用戶權限的驗證、查看、收回、修改等各種常用操作技巧,需要的朋友可以參考下
    2018-04-04
  • mysql獲取分組后每組的最大值實例詳解

    mysql獲取分組后每組的最大值實例詳解

    這篇文章主要介紹了 mysql獲取分組后每組的最大值實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • MySQL模糊查詢語句整理集合

    MySQL模糊查詢語句整理集合

    在本篇文章里小編給大家分享的是一篇關于MySQL模糊查詢語句整理內容,有興趣的朋友們可以學習下。
    2020-02-02

最新評論