假设我的虚拟数据如下所示。
Col1 Col2
A 10
A 20
B 30
C 10
C 50
C 60
我想得到一张如下表格。
Distinct Col1 Avg Not_Avg
A 15 37.5
B 30 30
C 40 20
因此,当存在值时,基本上是平均值,而不是。 我正在研究Oracle SQL。谁能指导我如何做到这一点?
答案 0 :(得分:1)
一种变体是两次GROUP
数据。
首先GROUP BY Col1
计算简单平均值。
第二次将此中间结果连接到原始表以获取带有"其他"的行。价值并再次计算平均值。
WITH
CTE_Avg
AS
(
SELECT
Col1
,AVG(Col2) AS AvgCol2
FROM T
GROUP BY Col1
)
SELECT
CTE_Avg.Col1
,CTE_Avg.AvgCol2
,AVG(T.Col2) AS Not_Avg
FROM
CTE_Avg
INNER JOIN T ON T.Col1 <> CTE_Avg.Col1
GROUP BY
CTE_Avg.Col1
,CTE_Avg.AvgCol2
;
答案 1 :(得分:0)
试试这个
-- test data
with data(Col1,
Col2) as
(select 'A', 10
from dual
union all
select 'A', 20
from dual
union all
select 'B', 30
from dual
union all
select 'C', 10
from dual
union all
select 'C', 50
from dual
union all
select 'C', 60
from dual)
-- select avg and avg of not equal col1
select d1.col1, avg(d1.col2), (select avg(col2) from data d2 where d2.col1<> d1.col1)
from data d1
group by d1.col1