Oracle 中的 SQL 查询用于汇总别名列中的值

问题描述 投票:0回答:1

在 Oracle 中,我想制作一个

SELECT
语句与
UNION ALL
组合来计算某些表中的所有行(第二列),并为每行(第一列)分配一个描述。下面是我实际拥有的和结果。

SELECT 'Amsterdam' AS city, count(*) AS amount FROM A
UNION ALL
SELECT 'Berlin' AS city, count(*) AS amount FROM B
UNION ALL
SELECT ALL 'California' AS city, count(*) AS amount FROM C;
城市 金额
阿姆斯特丹 3
柏林 2
加利福尼亚州 4

我还想将

TOTAL
添加到结果最后一行,作为
CITY
9
AMOUNT
列中所有值的总和)作为
AMOUNT
。下面是可视化。

城市 金额
阿姆斯特丹 3
柏林 2
加利福尼亚州 4
总计 9

我对此很挣扎,因为我找不到一种方法来对不存在的列(

SUM
)进行另一个操作(在本例中为
CITY
),因为它是由我的查询生成的。这就是我尝试做的,但我得到了
ORA-00942: table or view does not exist

SELECT city, amount FROM
(SELECT 'Amsterdam' AS city, count(*) AS amount FROM A
UNION ALL
SELECT 'Berlin' AS city, count(*) AS amount FROM B
UNION ALL
SELECT ALL 'California' AS city, count(*) AS amount FROM C) t
UNION ALL
SELECT 'TOTAL' AS city, SUM(t.amount) AS amount FROM t;

我将感谢任何帮助。

sql oracle select alias union-all
1个回答
0
投票

汇总怎么样?

SQL> with temp as
  2  -- this is your current query
  3  (
  4  SELECT 'Amsterdam' AS city, count(*) AS amount FROM A
  5  UNION ALL
  6  SELECT 'Berlin' AS city, count(*) AS amount FROM B
  7  UNION ALL
  8  SELECT ALL 'California' AS city, count(*) AS amount FROM C
  9  )
 10  -- your current query ends here
 11  select
 12    case when grouping_id(city) = 1 then 'Total' else city end as city,
 13    sum(amount) amount
 14  from temp
 15  group by rollup(city);

CITY           AMOUNT
---------- ----------
Amsterdam           3
Berlin              2
California          4
Total               9

SQL>

或者,你尝试的方式:

SQL> with temp as
  2  -- this is your current query
  3  (
  4  SELECT 'Amsterdam' AS city, count(*) AS amount FROM A
  5  UNION ALL
  6  SELECT 'Berlin' AS city, count(*) AS amount FROM B
  7  UNION ALL
  8  SELECT ALL 'California' AS city, count(*) AS amount FROM C
  9  )
 10  -- your current query ends here
 11  select * from temp
 12  union all
 13  select 'Total', sum(amount)
 14  from temp;

CITY           AMOUNT
---------- ----------
Amsterdam           3
Berlin              2
California          4
Total               9

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.