Oracle

时间:2015-12-13 17:37:08

标签: oracle oracle11g aggregate aggregate-functions

我在Oracle中有一个表,它包含多个列,如下所示。

我正在寻找一种聚合此表上的值的方法,以显示Region为“Region name”的国家/地区

accnt  country  region  value
--------------------------------------
1        A       AS     20
1        B       AS     70
1        C       AF     10
2        D       NA     50
2        E       AS     40
2        F       AF     10
3        G       NA     30
3        H       AS     30
4        I       NA     50
4        J       NA     40
4        K       NA     20

我怎样才能实现这一目标?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您可以使用sum功能,并按region

对结果进行分组
SELECT   region, SUM(value)
FROM     mytable
GROUP BY region

答案 1 :(得分:0)

对于特定地区,您可以这样做:

select count(*) totalcountries, sum(value) as totalvalue
from tablename
where region = 'AS'

结果:

| totalcountries | totalvalue |
|----------------|------------|
|              4 |        160 |

对于多个地区,您可以这样做:

select count(*) as totalcountries, sum(value) as totalvalue
from test1
where region in ('AS','NA')

结果:

| totalcountries | totalvalue |
|----------------|------------|
|              9 |        350 |

要按地区获取信息,您可以执行Mureinik所提到的

select region, count(*) as totalcountries, sum(value) as totalvalue
from test1
group by region

结果:

| region | totalcountries | totalvalue |
|--------|----------------|------------|
|     AF |              2 |         20 |
|     AS |              4 |        160 |
|     NA |              5 |        190 |

如果您想按地区获取信息,但仅限于几个地区,您可以这样做:

select region, count(*) as totalcountries, sum(value) as totalvalue
from test1
where region in ('AS', 'NA')
group by region;

结果:

| region | totalcountries | totalvalue |
|--------|----------------|------------|
|     AS |              4 |        160 |
|     NA |              5 |        190 |

这是MySQL的一个例子;相同的查询将与Oracle一起使用。由于SQLFiddle与Oracle不兼容,我选择使用MySQL对信息进行采样:http://sqlfiddle.com/#!9/081c0/4