最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀SQL中GROUP BY和HAVING子句中使用NULL條件問題

 更新時間:2024年10月16日 16:23:05   作者:qianer0_0  
在使用SQL進行數(shù)據(jù)查詢時,可能會遇到查詢結果為空的情況,這通常與GROUP BY和HAVING子句的使用有關,尤其是在處理包含NULL值的字段時,當使用GROUP BY進行數(shù)據(jù)分組,并在HAVING子句中直接判斷字段是否為NULL時

SQL中GROUP BY和HAVING子句中使用NULL條件

  • SQL :
SELECT COUNT(1), tid, sap_do, batch, skucode,batch 
FROM lt 
WHERE IFNULL(sap_do, '') != '' 
AND created_time >= 1722441600 
GROUP BY tid, sap_do, skucode 
HAVING COUNT(1) > 1 
AND batch IS NULL; 

查詢結果為空;實際數(shù)據(jù)庫存在batch IS NULL的

  • 修改后:
SELECT COUNT(1), tid, sap_do, skucode, batch 
FROM lt 
WHERE IFNULL(sap_do, '') != '' 
AND created_time >= 1722441600 
GROUP BY tid, sap_do, skucode 
HAVING COUNT(1) > 1 
AND SUM(CASE WHEN batch IS NULL THEN 1 ELSE 0 END) > 0;

問題的核心在于 GROUP BY 和 HAVING 子句的工作方式,以及 NULL 的處理規(guī)則

1. HAVING batch IS NULL 沒有數(shù)據(jù)的原因

當你使用 GROUP BY 并在 HAVING 子句中直接使用 batch IS NULL,SQL 會在分組后的結果中查找 batch 的值是否為 NULL。但是由于 GROUP BY 會對所有同一組內的數(shù)據(jù)進行聚合,batch 字段可能包含 NULL 和非 NULL 的混合值。

對于 GROUP BY 而言,它不會簡單地保留 batch 字段的某一個特定值,因此如果某個分組內的 batch 值既有 NULL 又有非 NULL 的情況,batch IS NULL 這個條件會失效,因為 SQL 無法確定這一組的 batch 值究竟是 NULL 還是非 NULL。

直接使用 HAVING batch IS NULL 通常只能在整個分組的 batch 全部是 NULL 的情況下才會生效。

簡而言之,當 batch 列在分組后不全是 NULL 時,HAVING batch IS NULL 無法篩選出結果。

2. HAVING SUM(CASE WHEN batch IS NULL THEN 1 ELSE 0 END) > 0 結果正確的原因

SUM(CASE WHEN batch IS NULL THEN 1 ELSE 0 END) 的邏輯是通過 CASE 語句來計算某個分組內 batch 列為 NULL 的記錄數(shù)。

SUM 是對整個分組內的每一條記錄進行處理,因此即使該組內存在 batch 的非 NULL 值,只要有任何一條記錄的 batch 是 NULL,SUM 就能正確計算出這一組包含 NULL 值的數(shù)量。

解釋:

  • SUM(CASE WHEN batch IS NULL THEN 1 ELSE 0 END) > 0:通過這個 SUM,我們計算出當前分組內有多少條記錄的 batch 為 NULL,如果結果大于 0,說明這一組內存在 NULL 值的 batch。
  • HAVING batch IS NULL:只能篩選出分組后 batch 的值完全為 NULL 的情況,無法處理那些包含 NULL 和非 NULL 值的分組。

總結

HAVING batch IS NULL 只能處理整個分組中的 batch 全為 NULL 的情況,這在有混合值的分組中會導致結果為空。

HAVING SUM(CASE WHEN batch IS NULL THEN 1 ELSE 0 END) > 0 可以處理分組中包含 NULL 和非 NULL 的情況,因此它能正確返回包含 NULL 值的分組。

這種 SUM(CASE WHEN…) 邏輯提供了更細粒度的控制,可以確保即使在分組中存在多個不同的 batch 值,依然可以正確識別出那些包含 NULL 的分組。

補充

如果查詢id字段的話 上面的SQL結果會發(fā)現(xiàn),id結果不是我們想要的batch為null的行ID

可改造SQL為下面 執(zhí)行:

SELECT id, tid, sap_do, skucode, batch 
FROM lt
WHERE batch IS NULL
AND (tid, sap_do, skucode) IN (
    SELECT tid, sap_do, skucode
    FROM lt 
    WHERE IFNULL(sap_do, '') != ''
    AND created_time >= 1725120000
    GROUP BY tid, sap_do, skucode
    HAVING COUNT(1) > 1
    AND SUM(CASE WHEN batch IS NULL THEN 1 ELSE 0 END) > 0
);

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • RR與RC隔離級別下索引和鎖的測試腳本示例代碼

    RR與RC隔離級別下索引和鎖的測試腳本示例代碼

    這篇文章主要給大家介紹了關于RR與RC隔離級別下索引和鎖的測試腳本的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • MySQL5.5 部署的一個問題

    MySQL5.5 部署的一個問題

    這篇文章主要介紹了MySQL5.5部署的一個問題,以及解決方案,幫助大家更好的理解和使用數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • mysql8.0.11客戶端無法登陸的解決方法

    mysql8.0.11客戶端無法登陸的解決方法

    這篇文章主要為大家詳細介紹了mysql8.0.11客戶端無法登陸的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • mysql 導入導出數(shù)據(jù)庫、數(shù)據(jù)表的方法

    mysql 導入導出數(shù)據(jù)庫、數(shù)據(jù)表的方法

    這篇文章主要介紹了mysql 導入導出數(shù)據(jù)庫、數(shù)據(jù)表的方法,有需要的朋友可以參考一下
    2013-11-11
  • MySql/Oracle數(shù)據(jù)庫項目改造適配信創(chuàng)國產數(shù)據(jù)庫的方法詳解

    MySql/Oracle數(shù)據(jù)庫項目改造適配信創(chuàng)國產數(shù)據(jù)庫的方法詳解

    項目里用了MySQL數(shù)據(jù)庫,現(xiàn)在要換成國產信創(chuàng)數(shù)據(jù)庫,很多團隊都在頭疼這個問題,這篇文章主要介紹了MySql/Oracle數(shù)據(jù)庫項目改造適配信創(chuàng)國產數(shù)據(jù)庫的相關資料,文中介紹的非常詳細,需要的朋友可以參考下
    2025-11-11
  • MySQL精準控制Binlog日志數(shù)量的三種方案

    MySQL精準控制Binlog日志數(shù)量的三種方案

    作為數(shù)據(jù)庫管理員,你是否經(jīng)常為服務器磁盤爆滿而抓狂?Binlog就像數(shù)據(jù)庫的“黑匣子”,默默記錄著每一次數(shù)據(jù)變動,但若放任不管,幾天內這些日志文件就能吞噬上百GB空間!今天教你三招精準控制Binlog數(shù)量,從此告別空間焦慮,需要的朋友可以參考下
    2025-05-05
  • MYSQL數(shù)據(jù)庫管理之權限管理解讀

    MYSQL數(shù)據(jù)庫管理之權限管理解讀

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫管理之權限管理解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MySQL5綠色版windows下安裝總結(推薦)

    MySQL5綠色版windows下安裝總結(推薦)

    這篇文章主要介紹了MySQL5綠色版windows下安裝總結,需要的朋友可以參考下
    2017-03-03
  • MySQL低權限提權的方法

    MySQL低權限提權的方法

    在MySQL中,低權限提權是一種常見的需求,低權限用戶通過利用漏洞、存儲過程、用戶定義函數(shù)(UDF)和觸發(fā)器(Trigger)等技術手段進行權限提升,本文就來介紹一下,感興趣的可以了解一下
    2024-09-09
  • Mysql5.7忘記root密碼怎么辦(簡單且有效方法)

    Mysql5.7忘記root密碼怎么辦(簡單且有效方法)

    本文給大家分享一個快速且簡單的方法來解決Mysql5.7忘記root密碼問題,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-02-02

最新評論

图们市| 天长市| 常州市| 肥西县| 汉沽区| 沿河| 天水市| 玉门市| 长岛县| 息烽县| 勃利县| 延川县| 凌海市| 同江市| 岱山县| 雷波县| 罗江县| 原平市| 河北区| 台东县| 阳城县| 青岛市| 德庆县| 咸宁市| 兴宁市| 揭东县| 三亚市| 兴义市| 进贤县| 东方市| 江山市| 宜章县| 应城市| 永泰县| 嫩江县| 丰台区| 柳江县| 边坝县| 资兴市| 迁西县| 望城县|