2011-04-12 96 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