按组别百分比 - 甲骨文
Percentage by group - oracle
我有这个样本。
我需要的是获取每个键的平均值,而不是键和值。但是,我使用的语法似乎给出了每个键和值的平均值。
select avg(value2),KEY,VALUE from testavg
GROUP BY key,value
order by key, value
否则会产生语法错误。我需要的结果如下:
10 A 0.96
10 B 0.04
12 C 1
但是我使用的语句产生了上面不正确的结果。
这可以通过发布 1 个 oracle select 语句来实现吗?我已经包含了创建整个 table.
的语句
CREATE TABLE "TESTAVG"
( "KEY" NUMBER,
"VALUE" VARCHAR2(20 BYTE),
"VALUE2" NUMBER
)
Insert into TESTAVG (KEY,VALUE,VALUE2) values (10,'A',12);
Insert into TESTAVG (KEY,VALUE,VALUE2) values (10,'A',13);
Insert into TESTAVG (KEY,VALUE,VALUE2) values (10,'B',1);
Insert into TESTAVG (KEY,VALUE,VALUE2) values (12,'C',20);
select avg(value2),KEY from testavg
GROUP BY key
order by key;
8.66666666666666666666666666666666666667 10
20 12
编辑:规格仍不清楚,但这可能是您需要的...
with gr1 as (select key,sum(value2) sumvalue
from testavg
group by key)
, gr2 as (select key,value,sum(value2) sumvalue
from testavg
GROUP BY key,value)
select gr1.key,gr2.value,gr2.sumvalue/gr1.sumvalue
from gr1
, gr2
where gr1.key = gr2.key;
10 B 0.0384615384615384615384615384615384615385
12 C 1
10 A 0.9615384615384615384615384615384615384615
此查询在较大数据上可能 运行 更快 - 只读取 table 一次:
select distinct key, value,
sum(value2) over (partition by key, value) / sum(value2) over (partition by key) r
from testavg
/
KEY VALUE R
---------- -------------------- ----------
10 A .961538462
10 B .038461538
12 C 1
我有这个样本。
我需要的是获取每个键的平均值,而不是键和值。但是,我使用的语法似乎给出了每个键和值的平均值。
select avg(value2),KEY,VALUE from testavg
GROUP BY key,value
order by key, value
否则会产生语法错误。我需要的结果如下:
10 A 0.96
10 B 0.04
12 C 1
但是我使用的语句产生了上面不正确的结果。 这可以通过发布 1 个 oracle select 语句来实现吗?我已经包含了创建整个 table.
的语句CREATE TABLE "TESTAVG"
( "KEY" NUMBER,
"VALUE" VARCHAR2(20 BYTE),
"VALUE2" NUMBER
)
Insert into TESTAVG (KEY,VALUE,VALUE2) values (10,'A',12);
Insert into TESTAVG (KEY,VALUE,VALUE2) values (10,'A',13);
Insert into TESTAVG (KEY,VALUE,VALUE2) values (10,'B',1);
Insert into TESTAVG (KEY,VALUE,VALUE2) values (12,'C',20);
select avg(value2),KEY from testavg
GROUP BY key
order by key;
8.66666666666666666666666666666666666667 10
20 12
编辑:规格仍不清楚,但这可能是您需要的...
with gr1 as (select key,sum(value2) sumvalue
from testavg
group by key)
, gr2 as (select key,value,sum(value2) sumvalue
from testavg
GROUP BY key,value)
select gr1.key,gr2.value,gr2.sumvalue/gr1.sumvalue
from gr1
, gr2
where gr1.key = gr2.key;
10 B 0.0384615384615384615384615384615384615385
12 C 1
10 A 0.9615384615384615384615384615384615384615
此查询在较大数据上可能 运行 更快 - 只读取 table 一次:
select distinct key, value,
sum(value2) over (partition by key, value) / sum(value2) over (partition by key) r
from testavg
/
KEY VALUE R
---------- -------------------- ----------
10 A .961538462
10 B .038461538
12 C 1