六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

時序數(shù)據(jù)庫聚合查詢詳解:GROUP BY與聚合函數(shù)完全指南

Xiaxin Li

2026-04-17 /

聚合查詢是時序數(shù)據(jù)分析的核心能力,通過聚合函數(shù)和分組操作,可以從海量時序數(shù)據(jù)中提取有價值的統(tǒng)計(jì)信息。本文將詳細(xì)介紹TDengine時序數(shù)據(jù)庫的聚合查詢功能。

一、聚合查詢基礎(chǔ)

1.1 什么是聚合查詢

聚合查詢是指對一組數(shù)據(jù)進(jìn)行匯總計(jì)算,返回單一結(jié)果的查詢方式。在時序數(shù)據(jù)庫場景中,聚合查詢常用于:

  • 計(jì)算平均值、最大值、最小值
  • 統(tǒng)計(jì)數(shù)據(jù)量
  • 按維度分組匯總
  • 計(jì)算數(shù)據(jù)分布特征

1.2 GROUP BY子句規(guī)則

TDengine支持通過GROUP BY子句對數(shù)據(jù)進(jìn)行聚合查詢。SQL語句包含GROUP BY子句時,SELECT列表只能包含如下表達(dá)式:

  1. 常量
  2. 聚合函數(shù)
  3. 與GROUP BY后表達(dá)式相同的表達(dá)式
  4. 包含前面表達(dá)式的表達(dá)式

1.3 基本聚合查詢示例

SELECT groupid, avg(voltage) 
FROM meters 
WHERE ts >= "2022-01-01T00:00:00+08:00" 
AND ts < "2023-01-01T00:00:00+08:00" 
GROUP BY groupid;

上面的SQL查詢超級表meters中指定時間范圍的數(shù)據(jù),按照groupid進(jìn)行分組,求每組的平均電壓。

查詢結(jié)果:

 groupid | avg(voltage)          |
======================================
 8       | 243.961981544901079   |
 5       | 243.961981544901079   |
 1       | 243.961981544901079   |
 7       | 243.961981544901079   |
 9       | 243.961981544901079   |
 6       | 243.961981544901079   |
 4       | 243.961981544901079   |
 10      | 243.961981544901079   |
 2       | 243.961981544901079   |
 3       | 243.961981544901079   |
Query OK, 10 row(s) in set (0.042446s)

注意:GROUP BY子句在聚合數(shù)據(jù)時,并不保證結(jié)果集按照特定順序排列。為了獲得有序的結(jié)果集,可以使用ORDER BY子句對結(jié)果進(jìn)行排序。

二、內(nèi)置聚合函數(shù)詳解

TDengine提供了多種內(nèi)置的聚合函數(shù),滿足不同的分析需求。

2.1 基礎(chǔ)統(tǒng)計(jì)函數(shù)

函數(shù)功能說明示例
AVG統(tǒng)計(jì)指定字段的平均值AVG(voltage)
COUNT統(tǒng)計(jì)指定字段的記錄行數(shù)COUNT(*)
SUM統(tǒng)計(jì)表中某列的和SUM(current)
MAX統(tǒng)計(jì)表中某列的最大值MAX(voltage)
MIN統(tǒng)計(jì)表中某列的最小值MIN(voltage)

2.2 高級統(tǒng)計(jì)函數(shù)

函數(shù)功能說明
STDDEV統(tǒng)計(jì)表中某列的均方差
SPREAD統(tǒng)計(jì)表中某列的最大值和最小值之差
PERCENTILE統(tǒng)計(jì)表中某列的值百分比分位數(shù)
APERCENTILE統(tǒng)計(jì)表/超級表中指定列的值的近似百分比分位數(shù)

2.3 時序特色函數(shù)

函數(shù)功能說明
ELAPSED表達(dá)統(tǒng)計(jì)周期內(nèi)連續(xù)的時間長度,和TWA函數(shù)配合使用可以計(jì)算統(tǒng)計(jì)曲線下的面積
LEASTSQUARES統(tǒng)計(jì)表中某列的值的擬合直線方程
HYPERLOGLOG采用hyperloglog算法,返回某列的基數(shù)
HISTOGRAM統(tǒng)計(jì)數(shù)據(jù)按照用戶指定區(qū)間的分布

三、常用聚合函數(shù)應(yīng)用

3.1 AVG – 平均值計(jì)算

-- 計(jì)算所有設(shè)備的平均電壓
SELECT AVG(voltage) FROM meters;

-- 按分組計(jì)算平均電壓
SELECT groupid, AVG(voltage) FROM meters GROUP BY groupid;

-- 按地區(qū)計(jì)算平均電流
SELECT location, AVG(current) FROM meters GROUP BY location;

3.2 COUNT – 計(jì)數(shù)統(tǒng)計(jì)

-- 統(tǒng)計(jì)總記錄數(shù)
SELECT COUNT(*) FROM meters;

-- 統(tǒng)計(jì)非空值數(shù)量
SELECT COUNT(voltage) FROM meters;

-- 按設(shè)備統(tǒng)計(jì)記錄數(shù)
SELECT tbname, COUNT(*) FROM meters GROUP BY tbname;

3.3 SUM – 求和計(jì)算

-- 計(jì)算電流總和
SELECT SUM(current) FROM meters;

-- 按分組計(jì)算電流總和
SELECT groupid, SUM(current) FROM meters GROUP BY groupid;

3.4 SPREAD – 極差計(jì)算

SPREAD函數(shù)計(jì)算最大值與最小值的差值,常用于分析數(shù)據(jù)波動范圍:

-- 計(jì)算電壓波動范圍
SELECT SPREAD(voltage) FROM meters;

-- 按設(shè)備計(jì)算電壓波動范圍
SELECT tbname, SPREAD(voltage) FROM meters GROUP BY tbname;

3.5 STDDEV – 標(biāo)準(zhǔn)差計(jì)算

標(biāo)準(zhǔn)差反映數(shù)據(jù)的離散程度:

-- 計(jì)算電壓標(biāo)準(zhǔn)差
SELECT STDDEV(voltage) FROM meters;

-- 按分組計(jì)算電壓標(biāo)準(zhǔn)差
SELECT groupid, STDDEV(voltage) FROM meters GROUP BY groupid;

四、百分位數(shù)函數(shù)

4.1 PERCENTILE

精確計(jì)算百分位數(shù):

-- 計(jì)算電壓的中位數(shù)(50%分位數(shù))
SELECT PERCENTILE(voltage, 50) FROM meters;

-- 計(jì)算電壓的95%分位數(shù)
SELECT PERCENTILE(voltage, 95) FROM meters;

4.2 APERCENTILE

近似計(jì)算百分位數(shù),適用于大數(shù)據(jù)量場景:

-- 近似計(jì)算電壓的中位數(shù)
SELECT APERCENTILE(voltage, 50) FROM meters;

APERCENTILE與PERCENTILE相似,但返回近似結(jié)果,在大數(shù)據(jù)量情況下性能更好。

五、LEASTSQUARES – 線性擬合

LEASTSQUARES函數(shù)用于計(jì)算數(shù)據(jù)的線性擬合方程:

-- 計(jì)算電流隨時間變化的線性擬合
SELECT LEASTSQUARES(current, 1, 1) FROM d1001;

參數(shù)說明:

  • 第一個參數(shù):要擬合的列
  • 第二個參數(shù):自變量初始值
  • 第三個參數(shù):自變量的步長值

六、HYPERLOGLOG – 基數(shù)估計(jì)

HYPERLOGLOG采用hyperloglog算法返回某列的基數(shù)(不同值的個數(shù)):

-- 估計(jì)不同電壓值的數(shù)量
SELECT HYPERLOGLOG(voltage) FROM meters;

該算法在數(shù)據(jù)量很大的情況下,可以明顯降低內(nèi)存的占用。求出來的基數(shù)是個估算值,標(biāo)準(zhǔn)誤差為0.81%。

七、HISTOGRAM – 數(shù)據(jù)分布統(tǒng)計(jì)

HISTOGRAM函數(shù)統(tǒng)計(jì)數(shù)據(jù)按照用戶指定區(qū)間的分布:

-- 統(tǒng)計(jì)電壓在不同區(qū)間的分布
SELECT HISTOGRAM(voltage, 200, 250, 10) FROM meters;

八、聚合查詢最佳實(shí)踐

8.1 結(jié)合時間范圍

聚合查詢應(yīng)結(jié)合時間范圍條件,提高查詢效率:

SELECT groupid, AVG(voltage), MAX(voltage), MIN(voltage)
FROM meters
WHERE ts >= '2022-01-01 00:00:00' AND ts < '2022-02-01 00:00:00'
GROUP BY groupid;

8.2 多聚合函數(shù)組合

可以在一個查詢中使用多個聚合函數(shù):

SELECT groupid, 
       COUNT(*) as count,
       AVG(voltage) as avg_voltage,
       MAX(voltage) as max_voltage,
       MIN(voltage) as min_voltage,
       STDDEV(voltage) as std_voltage
FROM meters
WHERE ts >= '2022-01-01 00:00:00'
GROUP BY groupid;

8.3 使用HAVING過濾分組

HAVING子句用于過濾分組后的結(jié)果:

SELECT groupid, AVG(voltage) as avg_v
FROM meters
GROUP BY groupid
HAVING avg_v > 240;

8.4 結(jié)果排序

使用ORDER BY對聚合結(jié)果排序:

SELECT groupid, AVG(voltage) as avg_v
FROM meters
GROUP BY groupid
ORDER BY avg_v DESC;

九、直接在超級表上聚合

用戶可以直接在超級表上執(zhí)行聚合查詢,無須預(yù)先創(chuàng)建子表:

SELECT location, AVG(voltage), COUNT(*)
FROM meters
WHERE ts >= '2022-01-01 00:00:00'
GROUP BY location;

TDengine會自動處理所有子表的數(shù)據(jù)聚合,大大簡化了查詢邏輯。

總結(jié)

聚合查詢是時序數(shù)據(jù)分析的核心能力,TDengine時序數(shù)據(jù)庫提供了豐富的聚合函數(shù)和靈活的分組機(jī)制。從基礎(chǔ)的COUNT、AVG、SUM到高級的PERCENTILE、LEASTSQUARES,這些函數(shù)覆蓋了時序數(shù)據(jù)分析的主要場景。通過合理使用聚合查詢,開發(fā)者可以從海量時序數(shù)據(jù)中快速提取有價值的信息,為工業(yè)數(shù)據(jù)管理平臺(IDMP)和實(shí)時數(shù)據(jù)庫應(yīng)用提供強(qiáng)大的數(shù)據(jù)支撐。TDengine憑借其高效的聚合查詢能力,成為物聯(lián)網(wǎng)和工業(yè)場景數(shù)據(jù)分析的理想選擇。