PLSQL-Parametric定义组函数

时间:2011-04-12 12:25:09

标签: plsql timestamp

我有一个表格,我希望应用一些聚合函数,其具有特定列的特定元素的分组作为标准。假设以下示例:

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

我希望找到按SITETIMESTAMP分组的平均值,但网站A,B我希望将其估算为一,这意味着我想REPLACE B WITH A有AND然后找到平均值:

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,但如果我希望以后再组合更多SITES

,这不是一个如此复杂的解决方案

2 个答案:

答案 0 :(得分:2)

您无需更新表格。

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
;

答案 1 :(得分:0)

你可以分别找到未组合和组合网站的平均值,然后将它们联合起来,就像这样 -

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