2011-04-12 68 views
1

我有一张表,我想要应用一些聚合函数作为标准的特定列的特定元素的分组。假设下面的例子:PLSQL-组功能的定义

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已经然后找到平均:

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

你不需要更新表。

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 
; 
0

你这是不是这样一个复杂的解决方案可以发现未结合,结合位点的单独的平均值,然后工会它们togeather,这样的 -

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