多維數據聚合方案:SQL GROUPING SETS深度解析

一、什么是GROUPING SETS?

GROUPING SETS是SQL標準中的多維聚合運算符,允許在單個查詢中實現多維度組合的分組統計。相較于傳統UNION ALL方案,性能可提升3-10倍(TPC-DS基準測試)。

二、核心語法解析

SELECT column1, column2,SUM(metric) 
FROM table
GROUP BY GROUPING SETS ((column1),          -- 維度1單獨分組(column2),          -- 維度2單獨分組(column1, column2), -- 維度組合()                  -- 總計行
)

三、實戰場景演示

場景1:電商銷售分析(時間+品類)
SELECT COALESCE(time_period, '總計') AS time,COALESCE(category, '全品類') AS category,SUM(sales) AS total_sales
FROM sales_data
GROUP BY GROUPING SETS ((time_period, category),  -- 各時段各品類(time_period),            -- 各時段匯總(category),               -- 各品類匯總()                        -- 全局總計
)
ORDER BY time NULLS LAST, category NULLS LAST;

time | category | total_sales


2023-Q1 | 手機 | 1200000

2023-Q1 | 電腦 | 980000

2023-Q1 | 全品類 | 2180000 -- 時段小計

全時段 | 手機 | 4500000 -- 品類匯總

全時段 | 電腦 | 3200000

總計 | 全品類 | 7700000 -- 全局總計

場景2:網絡流量監控(應用+地區)
SELECT app_type,region,COUNT(DISTINCT user_id) AS uv,SUM(data_usage) / 1024 AS data_usage_gb
FROM network_logs
GROUP BY GROUPING SETS ((app_type, region),  -- 應用+地區組合(app_type),          -- 應用維度匯總(region)             -- 地區維度匯總
)

四、進階使用技巧

1. 與GROUPING函數配合
SELECT CASE GROUPING(department) WHEN 1 THEN '所有部門' ELSE department END AS dept,CASE GROUPING(job_role) WHEN 1 THEN '全部職位' ELSE job_role END AS role,AVG(salary) AS avg_salary
FROM employee
GROUP BY GROUPING SETS ((department, job_role),(department),(job_role)
)
2. 分層統計模板
-- 生成國家-省份-城市三級統計
GROUPING SETS ((country, province, city),(country, province),(country),()
)

五、避坑指南

1. 字段引用陷阱

錯誤寫法:

SELECT SUM(amount)/COUNT(*) AS avg_amount  -- 錯誤!COUNT(*)包含空分組
FROM orders
GROUP BY GROUPING SETS ((region), ())

正確方案:

SELECT SUM(amount) / NULLIF(COUNT(region), 0) AS avg_amount
2. 排序邏輯優化
ORDER BY GROUPING(department) ASC,  -- 匯總行置后department NULLS LAST
3. 空值處理方案
SELECTCOALESCE(region, '全國') AS region,CASE WHEN GROUPING(month) = 1 THEN '年度匯總' ELSE TO_CHAR(month, 'YYYY-MM') END AS month
。
4.建議
  1. 優先使用GROUP BY ()顯式聲明總計行
  2. 所有度量字段必須使用聚合函數

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

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

相關文章

Excel中國式排名,3種方法!

大家好,我是小魚。 什么是中國式排名呢? 舉個例子比如說公司一共有10名員工進行成績考核,如果9個人考核成績都是90分,你是89分,按照國際慣用的排名法則:9 個人考核成績并列第一,你第10名&…

哪些業務場景更適合用MongoDB?何時比MySQL/PostgreSQL好用?

哪些業務場景更適合用MongoDB?何時比MySQL/PostgreSQL好用? 就像淘寶的個性化推薦需要靈活調整商品標簽,MongoDB這種"變形金剛"式的數據庫,在處理以下三類中國特色業務場景時更具優勢: 一、動態數據就像&q…

深度解讀:OpenAI發布GPT-5的技術突破與商業影響

引言 2025年2月,OpenAI正式發布GPT-5,這一被譽為“AI新紀元開篇之作”的模型,不僅實現了技術架構的顛覆性創新,更以免費開放策略引發行業地震。本文將從技術突破、商業影響、行業競爭格局及未來挑戰四個維度,全面解析…

網絡防火墻是什么有什么用_網絡防火墻:守護信息安全的重要屏障

網絡防火墻的基本概念 網絡防火墻是網絡安全領域的重要組成部分,它充當著內部網絡和外部網絡之間的安全防護層。防火墻能夠監控和控制進出網絡的數據流,只允許符合安全策略的信息通過,從而有效阻止潛在威脅的入侵。簡而言之,網絡…

C# WPF 串口通信

C# WPF 串口通信 安裝依賴庫 安裝依賴庫 System.IO.Ports using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windo…

【玩轉23種Java設計模式】結構型模式篇:組合模式

軟件設計模式(Design pattern),又稱設計模式,是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。 匯總目錄鏈接&…

如何選取合適的 NewRatio 值來優化 JVM 的垃圾回收策略

目錄 一、垃圾回收模型簡介 (一)新生代(Young Generation) (二)老年代(Old Generation) (三)NewRatio 的作用與影響 (四)圖解&am…

Element Plus中的樹組件的具體用法(持續更新!)

const defaultProps {//子樹為節點對象的childrenchildren: children,//節點標簽為節點對象的name屬性label: name, } 屬性 以下是樹組件中的常用屬性以及作用: data:展示的數據(數據源) show-checkbox:節點是否可…

第十一屆藍橋杯單片機國賽

什么?4T模擬賽和省賽做起來輕輕松松?不妨來挑戰一下第十一屆國賽,這一屆的國賽居然沒考超聲波、串口通信!只要你正確地理解了題目的意思,規避出題人挖的坑,拿個國一輕輕松松。 附件:第十一屆藍橋…

大彩串口屏開發 —— MODBUS通信

目 錄 Modbus通信方式 1 使用變量與協議設置方式 2 使用LUA腳本方式 3 兩者結合 Modbus通信 大彩串口屏可以采用三種方式實現與其它設備進行modbus通信和邏輯處理。 方式 1 使用變量與協議設置 步驟1 在協議設置里進行設置,包括開啟modbus協議,屏做為主…

【Linux docker】關于docker啟動出錯的解決方法。

無論遇到什么docker啟動不了的問題 就是 查看docker狀態sytemctl status docker查看docker日志sudo journalctl -u docker.service查看docker三個配置文件(可能是配置的時候格式錯誤):/etc/docker/daemon.json(如果存在&#xf…

怎么實現: 大語言模型微調案例

怎么實現: 大語言模型微調案例 目錄 怎么實現: 大語言模型微調案例輸入一個反常識的問題:首都在北京天安門之后對輸出模型進行測試:首都在北京天安門微調代碼:測試微調模型代碼:微調輸出模型結構輸出模型參數大小對比Qwen 2.5_0.5:53MB輸出模型:951MB 是一樣的,沒有進行…

rdiff-backup備份

目錄 1. 服務器備份知識點 1.1 備份策略 1.2 備份步驟和寶塔面板簡介 1.3 CentOS7重要目錄 2. 備份工具 2.1 tar -g 備份演示 2. rsync 備份演示 3. rdiff-backup 備份演示 4. 差異和優缺點 3. rdiff-backup安裝和使用 3.1 備份命令rdiff-backup 3.2 恢復命令--…

Claude:AI領域的多面手,從語言模型到智能編碼

文章目錄 引言Claude的起源與發展1. Claude的誕生2. Claude 3.7 Sonnet的突破 版本迭代技術原理Claude的獨特優勢混合推理模式成本與性能的平衡開發者友好的工具 功能及應用Claude的未來展望結論 引言 Claude是由Anthropic公司開發的大型語言模型,在人工智能領域&a…

RocketMQ 詳細教程(Spring Boot Spring Cloud Alibaba)

1. RocketMQ 簡介 RocketMQ 是阿里巴巴開源的一款分布式消息隊列,具有高吞吐量、低延遲、可靠性等特點,廣泛應用于金融、電商、物聯網等領域。 RocketMQ 的核心特性: 高可靠性:支持消息存儲、重復消費、失敗重試等高可用性&…

Spring(七)AOP-代理模式

目錄 代理模式 一 靜態代理 一、核心作用 二、使用場景 二 動態代理 一、核心作用 二、使用場景 具體實現:(初始) 具體實現:(改進) 一、核心業務邏輯 1. 接口 MathCalculator 2. 實現類 MathCa…

Java Lambda表達式:現代編程的簡潔之道

引言 在Java 8中,Lambda表達式的引入標志著Java語言向函數式編程邁出了重要一步。Lambda不僅簡化了代碼結構,還提升了開發效率,使得Java能夠更靈活地應對現代編程需求。本文將深入探討Lambda表達式的核心概念、語法規則、應用場景及其對Java…

BGP分解實驗·21——BGP選路原則之本地優先級

當使用BGP路徑屬性——本地優先級,進行路由優選時,優選“本地優先級”數值較大的那個。(eBGP之間更新不攜帶這個屬性) 實驗拓撲如下: 在未實現本地優先級策略前,先在各個BGP之間配置完成基本連接。 R1的基…

【redis】應用場景:共享會話和手機驗證碼

文章目錄 共享會話實現思路 手機驗證碼實現思路偽代碼實現生成驗證碼驗證驗證碼 共享會話 實現思路 如果每個應用服務器,維護自己的會話數據,此時彼此之間胡共享,用戶請求訪問到不同的服務器上,就可能會出現一些不能正確處理的情…

通義萬相 2.1 + 藍耘算力,AI 視頻生成的夢幻組合

在這個科技日新月異的時代,人工智能不斷刷新著我們對世界的認知。一次偶然的機會,我借助北京藍耘科技股份有限公司提供的算力支持,踏上了使用通義萬相 2.1 進行 AI 視頻生成的奇妙之旅。 目錄 1.1初遇藍耘科技: 1.2通義萬相 2.1…