在 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> 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>