mysql統計所有分類下的數量,沒有的也要展示

来源:https://www.cnblogs.com/daydreamer-fs/p/18100943
-Advertisement-
Play Games

要求統計所有分類下的數量,如果分類下沒有對應的數據也要展示。這種問題在日常的開發中很常見,每次寫每次忘,所以在此記錄下。 這種統計往往不能直接group by,因為有些類別可能沒有對應的數據 這裡有兩個思路(如果您有更好的方法,請一定要告訴我,求求了): 每種類型分別統計,用union 連接(比較適 ...


要求統計所有分類下的數量,如果分類下沒有對應的數據也要展示。這種問題在日常的開發中很常見,每次寫每次忘,所以在此記錄下。

這種統計往往不能直接group by,因為有些類別可能沒有對應的數據

這裡有兩個思路(如果您有更好的方法,請一定要告訴我,求求了):

  1. 每種類型分別統計,用union 連接(比較適合類型已知、不多且確定的)

    過UNION操作符組合了三個獨立的查詢,每個查詢都基於數據表計算了不同條件下的數量,簡單粗暴,但不是很推薦

    SELECT `status` `key`,COUNT(id) amount FROM 數據表 WHERE `status` IS NULL
    UNION 
    SELECT 1 `key`,COUNT(id) amount FROM 數據表  WHERE `status` = 1
    UNION 
    SELECT 2 `key`,COUNT(id) amount FROM 數據表 WHERE `status` = 2
    UNION 
    SELECT 3 `key`,COUNT(id) amount FROM 數據表  WHERE `status` = 3
    

    優化(枚舉類型,left join數據表):

    SELECT
    	a.`key`,
    	IFNULL( b.amount, 0 ) amount 
    FROM
    	( SELECT 1 AS `key` UNION SELECT 2 UNION SELECT 3 ) AS a
    LEFT JOIN ( SELECT `status` `key`, COUNT( id ) amount FROM 數據表 GROUP BY `status` ) AS b ON a.`key` = b.`key`
    

    性能分析:
    第一個SQL語句進行了多次全表掃描(假設索引未覆蓋status欄位)。這種做法可能導致更多的磁碟I/O操作,尤其是當數據量較大時,性能開銷會較高。

    第二個SQL語句僅對數據表進行了一次掃描,並利用了GROUP BY進行聚合操作,減少了磁碟I/O,理論上在大多數情況下比第一個SQL更高效。

    結論

    第二個SQL語句在性能和耗時上通常優於第一個SQL語句,因為它只需要遍歷表一次,並對結果進行一次性聚合,避免了多次全表掃描帶來的性能損失。

    若status欄位上有索引,第二個SQL的優勢會更加明顯,因為可以利用索引加速查詢過程。

  2. 先查類型表,left join數據表,最後對left join後的數據再進行分組,註意:要給右表(數據表)為空時判斷

    和第一個的優化版思路是一樣的

    SELECT
    	a.id `key`,
    	a.classify_name `name`,
    	COUNT(b.id) `count`
    FROM
    	分類表 a
    LEFT JOIN 數據表 b ON b.`level` = a.id
    GROUP BY a.id
    

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文首發於公眾號:Hunter後端 原文鏈接:MySQL面試必備一之索引 在面試過程中,會有一些關於 MySQL 索引相關的問題,以下總結了一些: MySQL 的數據存儲使用的是什麼索引結構 B+ 樹的結構是什麼樣子 什麼是複合索引、聚簇索引、覆蓋索引 什麼是最左匹配原則 數據 B+ 樹中是如何查詢 ...
  • 本文分享自華為雲社區《GaussDB(DWS)的cgroup、資源池、用戶的關係》,作者: nullptr_。 1. 前言 本文主要展示了DWS中cgroup、資源池、用戶之間的關係,從而對DWS的資源設置情況有個初步瞭解。 2. 相關對象創建腳本 gs_ssh -c "gs_cgroup -cS ...
  • 作者 | Shawn Gordon 翻譯 | Debra Chen 原文鏈接 | What the Heck is Apache SeaTunnel? 我在2023年初開始註意到Apache SeaTunnel的相關討論,一直低調地關註著。該項目始於2017年,最初名為Waterdrop,在Apac ...
  • 目錄一、環境搭建1、關閉防火牆firewalld,selinux2、每台主機安裝MySQL二、基於GTID的主從複製1、修改/etc/my.cnf文件2、檢查GTID狀態3、配置主從複製4、從庫設置三、部署MHA1、準備環境(所有節點)2、部署管理節點(可以部署在任何機器上)3、配置ssh信任4、啟 ...
  • 什麼是哈希桶 Redis中的哈希桶是一種數據結構,用於在Redis的哈希表(如字典結構)中存儲鍵值對。哈希桶是哈希表數組中的每個元素,可以視為一個容器或槽位,用於存放數據。在Redis中,當插入一個新的鍵值對時,會根據鍵的哈希值計算出一個索引,該索引指向特定的哈希桶。 每個哈希桶可以存儲多個鍵值對, ...
  • 在金融行業數字化轉型背景下,銀行等金融機構面臨著業務模式創新與數據應用的深度融合。業務上所需要的不再是單純的數據,而是數據背後映射的業務趨勢洞察,只有和業務相結合轉化為業務度量指標,經過數據分析處理呈現為報表進行展示,才能真正體現它們的價值。 但在需求轉化為指標的過程中,存在需求管理雜亂、登記維護難 ...
  • 企業搭建完善、全面的指標體系是企業用數據指導業務經營決策的第一步。但是做完指標之後,對指標的監控,經常被大家忽視。當指標發生了異常波動(上升或下降),需要企業能夠及時發現,並快速找到背後真實的原因,才能針對性地制定相應策略,否則就是盲打,原地打轉。 指標異常波動的具體場景,比如: · 企業關鍵詞的搜 ...
  • 【Pavia】遙感圖像數據集下載地址和讀取數據集代碼 目錄【Pavia】遙感圖像數據集下載地址和讀取數據集代碼前言Pavia數據集Pavia數據集地址:Pavia數據集預覽PaviaU.matPaviaU_gt.matPavia數據集的Matlab讀取方式Pavia數據集中PaviaU.mat的ma ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...