我有一个表格,我希望应用一些聚合函数,其具有特定列的特定元素的分组作为标准。假设以下示例:
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
我希望找到按SITE
,TIMESTAMP
分组的平均值,但网站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
答案 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