群函数的PLSQL参数化定义

群函数的PLSQL参数化定义,plsql,timestamp,Plsql,Timestamp,我有一个表,我想在其中应用一些聚合函数,将特定列的spesific元素分组作为标准。假设以下示例: TIMESTAMP SITE VALUE 10:00 A 100 10:00 B 50 10:00 C 25 10:00 D 25 10:05 A 25 10:05 B 15 10:05 C 5 10:05

我有一个表,我想在其中应用一些聚合函数,将特定列的spesific元素分组作为标准。假设以下示例:

TIMESTAMP   SITE    VALUE

10:00            A  100
10:00            B  50
10:00            C  25
10:00            D  25
10:05            A  25
10:05            B  15
10:05            C  5
10:05            D  10
我想通过
站点
时间戳
找到分组的平均值,但站点A,B我想将其估计为一,这意味着我想
用A
替换B,然后找到平均值:

TIMESTAMP   SITE    VALUE
10:00            A  75
10:00            A  75
10:00            C  25
10:00            D  25
10:05            A  20
10:05            A  20
10:05            C  5
10:05            D  10

一种方法是更新表设置
B=A
,但这不是一个复杂的解决方案,如果我将来想对更多
站点进行分组

,您可以分别找到未组合和组合站点的平均值,然后将它们合并在一起,如下所示-

SELECT timestamp, site, AVG(value) FROM
(
    -- uncombined
    SELECT timestamp, site, value FROM TABLE WHERE site NOT IN ('A', 'B')

    UNION ALL

    -- combined A, B
    SELECT timestamp, 'AB' site, AVG(value) val
    FROM TABLE
    GROUP BY timestamp
    WHERE site IN ('A', 'B') 
) U
GROUP BY timestamp, site

只是一个想法,没有测试sql,您不需要更新表

SELECT CASE site WHEN 'B' THEN 'A' ELSE site END as site
      ,timestamp
      ,AVG(value)
FROM sites
GROUP BY CASE site WHEN 'B' THEN 'A' ELSE site END
        ,timestamp
;