SQL 中 WHERE 與 HAVING 子句的使用

在編寫 SQL 查詢時,數據過濾是常見需求。WHERE 和 HAVING 子句雖然都用于篩選數據,但實際用法大不相同。本文通過具體示例對比兩者的核心區別,并結合實際場景演示聯合使用技巧,助力快速掌握這兩個關鍵工具的正確用法。

一、數據表結構

假設存在?sales?表,其結構如下:

sale_idproduct_idsale_datesale_amount
11012024-01-01100
21012024-01-02200
31022024-01-03150
41032024-01-04300
51032024-01-05250

二、WHERE 子句

(一)功能

用于過濾行數據,直接作用于表中的單行數據,在分組操作之前應用。

(二)特點

不能使用聚合函數。

假設嘗試在?WHERE?中使用聚合函數:

SELECT product_id, SUM(sale_amount) AS total_sales
FROM sales
WHERE SUM(sale_amount) > 150;  -- ? 錯誤:WHERE 無法使用聚合函數

錯誤原因
執行?WHERE?時,尚未對?sale_amount?進行求和計算,因此?SUM(sale_amount)?不存在。

(三)準確示例

假設要找出?sale_amount?大于 150 的銷售記錄。

SELECT *
FROM sales
WHERE sale_amount > 150;

結果

sale_idproduct_idsale_datesale_amount
21012024-01-02200
41032024-01-04300
51032024-01-05250

三、HAVING 子句

(一)功能

用于過濾分組后的結果集,作用于分組后的數據,在分組操作之后應用。

(二)特點

可以使用聚合函數(如?SUM()AVG()COUNT()?等)來定義過濾條件。

(三)具體示例

假設要找出銷售總額超過 400 的產品。

SELECT product_id, SUM(sale_amount) AS total_sales
FROM sales
GROUP BY product_id
HAVING SUM(sale_amount) > 400;

結果

product_idtotal_sales
103550

四、WHERE 和 HAVING 結合使用

(一)使用場景

當需要先對行數據進行過濾,再對分組結果進行過濾時,可結合使用?WHERE?和?HAVING?子句。

(二)示例

假設要找出銷售總額超過 400 的產品,并且只考慮在 2024 年 1 月 4 日及之后的銷售記錄。

SELECT product_id, SUM(sale_amount) AS total_sales
FROM sales
WHERE sale_date >= '2024-01-04'
GROUP BY product_id
HAVING SUM(sale_amount) > 400;

結果

product_idtotal_sales
103550

(三)執行順序

  1. WHERE?子句先對?sales?表中的行進行過濾,只選擇?sale_date?大于或等于 2024 年 1 月 4 日的記錄。
  2. GROUP BY?對過濾后的數據按?product_id?進行分組。
  3. HAVING?子句對分組后的結果進行過濾,只選擇銷售總額超過 400 的產品。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73953.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sampling – Model Context Protocol Specification

網頁鏈接 https://spec.modelcontextprotocol.io/specification/draft/client/sampling/ 主要內容概述 該網頁詳細介紹了Model Context Protocol (MCP) 中的“Sampling”功能。Sampling允許服務器通過客戶端請求語言模型(LLM)生成文本、音頻或圖像內容…

STM32-匯編2、外設

1.異常處理 reserved保留 ;將所有異常都初始化成一個函數 2.nop 空指令,什么不干&#xf…

匯能感知高品質的多光譜相機VSC02UA

VSC02UA概要 VSC02UA是一款高品質的200萬像素的光譜相機,適用于工業檢測、農業、醫療等領域。VSC02UA 包含 1600 行1200 列有源像素陣列、片上 10 位 ADC 和圖像信號處理器。它帶有 USB2.0 接口,配合專門的電腦上位機軟件使用,可進行圖像采集…

在C語言基礎上學Java【Java】【一】

眾所周知,Java是C風格的語言,對于學過C語言的人學Java可以快速適應。 廢話不多說,直接邊看代碼邊學。 數據類型,輸入和輸出 import java.util.Scanner;//為了使用Scanner public class a1 {//a1是類名,就是文件名&am…

Spring組件初始化擴展點:BeanPostProcessor

目錄 一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessBeforeInitialization2、postProcessAfterInitialization 四、實戰案例案例1:實現簡單的屬性打印案例2:動態代理增強(模擬AOP) 五、常見應用場景六、注意…

多模態RAG框架(二)OmniSearch (Self-adaptive Planning Agent) and Dynamic VQA Dataset

OmniSearch:Benchmarking Multimodal RAG with Dynamic VQA Dataset and Self-adaptive Planning Agent 文章鏈接:2411.02937 Github鏈接:Alibaba-NLP/OmniSearch: Repo for Benchmarking Multimodal Retrieval Augmented Generation with …

Multisim學習-04 示波器的使用

我們選擇一個信號源來說明示波器的使用。 模擬電路中平常一般用ac,am,fm,clock就可以演示了。 截圖說明: 1)波的周期時長,首先應該調整這個參數,它的倒數就是頻率。這個參數如果不適合&#xf…

2025年03月16日Github流行趨勢

項目名稱:glance 項目地址url:https://github.com/glanceapp/glance項目語言:Go歷史star數:13768今日star數:889項目維護者:svilenmarkov, c0smicdev, wfg, DVDAndroid, jonasknobloch項目簡介:…

aws訓練快速入門教程

AWS 相關核心概念 簡潔地介紹一下AWS訓練云服務的核心關聯概念: AWS核心服務層: 基礎設施層: EC2(計算), S3(存儲), RDS(數據庫)等人工智能層: SageMaker(訓練平臺), AI服務等 機器學習服務分級: 高層: 預構建AI服務(開箱即用)中層: SageMaker(主要訓練平臺)底層: 框架和基…

對接股票金融數據源API

StockTV 股票市場API StockTV 提供全面的實時和歷史股市數據 API,涵蓋全球股票、外匯、期貨及市場新聞數據,助力投資者精準把握市場動態。 主要功能 實時和歷史股市數據 API 獲取全球股票市場的實時行情、歷史數據及深度分析,支持多語言查詢…

HTML圖像標簽的詳細介紹

1. 常用圖像格式 格式特點適用場景JPEG有損壓縮,文件小,不支持透明適合照片、復雜圖像PNG無損壓縮,支持透明(Alpha通道)適合圖標、需要透明背景的圖片GIF支持動畫,最多256色簡單動畫、低色彩圖標WebP谷歌開…

Bilve 搭建手冊

從零搭建 Bilive 需要提前安裝docker bilive 第一步 docker cli to docker compose # https://www.mklab.cn/utils/docker sudo docker run \-itd \--name bilive_docker \-p 22333:2233 \ghcr.io/timerring/bilive:0.2.10version: 3.1 services:bilive_docker:image: ghcr…

內存高級話題

面試涼經,代碼最近寫的太少了,被面試官屠殺。 痛定思痛,對C新經典中的內存話題進行復現。 new A 與 new A() 的差別 (1)如果是一個空類,這兩行代碼沒什么區別。當然現實中也沒有程序員會寫一個空類。 &am…

2025最全Xshell配置手冊:從零開始下載安裝搭建遠程連接環境

🌈 軟件介紹 Xshell 7 是由韓國 NetSarang 公司開發的一款功能強大的終端模擬器。它專為 Windows 操作系統設計,廣泛應用于遠程連接管理和服務器管理。 📥 軟件下載與準備 1. 官方下載渠道(直接下載,安全無捆綁&…

算法模型從入門到起飛系列——廣度優先遍歷(BFS)

文章目錄 前言一、廣度優先遍歷(BFS)簡介1.1 廣度優先遍歷(BFS)的特點1.2 廣度優先遍歷(BFS)的要素 二、廣度優先遍歷(BFS)& 深度優先遍歷(DFS)2.1 廣度優…

CPP從入門到入土之類和對象Ⅱ

一、六大默認成員函數 默認成員函數是用戶沒有顯式實現,編譯器自動生成的成員函數。 一個類,我們在不寫的情況下,編譯器會默認生成六個默認成員函數 本文詳細介紹構造函數和析構函數 二、構造函數 構造函數雖名為構造函數,但是…

【華三】路由器交換機忘記登入密碼或super密碼的重啟操作

【華三】路由器交換機忘記登入密碼或super密碼的重啟操作 背景步驟跳過認證設備:路由器重啟設備翻譯說明具體操作 跳過當前系統配置重啟設備具體操作 背景 當console口的密碼忘記,或者說本地用戶的密碼忘記,其實這時候是登入不了路由器的&am…

視圖窗口的客戶區

書籍:《Visual C 2017從入門到精通》的2.4.2 MFC應用程序類型 環境:visual studio 2022 內容:【例2.38】視圖窗口的客戶區 說明:以下內容大部分來自騰訊元寶。 1.創建一個單文檔程序 一個簡單的單文檔程序-CSDN博客https://bl…

MySQL原理:邏輯架構

目的:了解 SQL執行流程 以及 MySQL 內部架構,每個零件具體負責做什么 理解整體架構分別有什么模塊每個模塊具體做什么 目錄 1 服務器處理客戶端請求 1.1 MySQL 服務器端邏輯架構說明 2 Connectors 3 第一層:連接層 3.1 數據庫連接池(Conn…

慕慕手記項目日記 首頁數據的渲染,使用js 2025-3-16

慕慕手記項目日記 首頁數據的渲染,使用js 2025-3-16 到這部分我們先測試能不能使用js的方式來動態數據,先寫出一個簡短的demo出來 console.log("index.js文件引入了")var ClientHeight document.documentElement.clientHeight; // 可視區域…