如何从SELECT在Oracle的SQL中使用了两个表的列中添加求和值
我正在做一个作业,我需要根据它们的通用代码将一些值相加,例如,如果一个表有如下值如何从SELECT在Oracle的SQL中使用了两个表的列中添加求和值,sql,oracle,group-by,aggregate-functions,Sql,Oracle,Group By,Aggregate Functions,我正在做一个作业,我需要根据它们的通用代码将一些值相加,例如,如果一个表有如下值 code | name --------------------- 1 | blah 2 | blah1 3 | blah2 1 | blah 然后是表2 code | amount ------------- 1 | 100 2 | 200 3 | 250 1 | 125 我需要用一个共同的代码把所有的
code | name
---------------------
1 | blah
2 | blah1
3 | blah2
1 | blah
然后是表2
code | amount
-------------
1 | 100
2 | 200
3 | 250
1 | 125
我需要用一个共同的代码把所有的值加起来,就像把代码为1的两个值的金额加起来,代码为2的值的金额加起来,代码为3的值的金额加起来一样
但是我还需要把所有的结果加起来。到目前为止,我已经用普通代码将行相加了。我只是在合计总数时遇到了问题,或者可能只是将“金额”列中的所有值相加。不过,我想把它放在一个单独的报表中,所以我想把单独的总额加起来会更容易
我想我已经记下了这个想法,我只是不知道如何实际执行它
现在,我有这个,我尝试了几种变体,包括使用HAVING子句,但仍然出现错误:
选择X_STORE.STORE_NAME作为店铺名称,选择SUMX_STORE_SALES.WEEKLY_SALES作为每周总销售额,选择SUMX_STORE_SALES.WEEKLY_SALES作为总销售额
从X_商店在X_商店上加入X_商店销售。商店销售代码=X_商店销售。商店销售代码
按门店名称分组;
以下是表格的代码,仅供参考:
创建表X_存储
存储\u代码整数,
商店名称:varchar220
;
插入X_存储值'1','Access Junction';
插入X_存储值'2','Database Corner';
插入X_存储值'3','Tuple Charge';
插入X_存储值'4','Attribute Alley';
插入X_存储值'5','Primary Key Point';
创建表X_商店_销售额
行号INT,
存储单元代码INT,
每周销售小数点12,2,
区域代码INT
;
插入X_商店_销售值1,1854558.38,1;
在X_商店中插入销售值2、2、689475.89、1;
在X_商店中插入销售值3,3978046.91,1;
在X_商店中插入销售值4,4,826270.78,1;
插入X_商店_销售值5,5,314859.95,1;
在X_商店_销售值中插入6,1402342.82,2;
在X_商店_销售值中插入7,2,326841.11,2;
在X_商店中插入销售值8,3503921.45,2;
在X_商店中插入销售值9,4,949408.97,2;
插入X_商店_销售值10,5581574.05,2;
在X_商店中插入销售值11,1638178.3,3;
插入X_商店_销售值12,251723.79,3;
在X_商店中插入销售值13,3556421.29,3;
在X_商店中插入销售值14,4951686.38,3;
在X_商店中插入销售值15,5902503.64,3;
在X_商店中插入销售值16,1443410.39,4;
在X_商店中插入销售值17,2281833.15,4;
在X_商店中插入销售值18,3409222.16,4;
在X_STORE_销售值中插入19,4853611.42,4;
插入X_商店_销售值20,511828.64,4;
预期输出如下所示:
store name | total weekly sales
--------------------------------------
Attribute Alley | 3580977.55
--------------------------------------
Primary Key Point | 1917166.28
--------------------------------------
Database Corner | 1809873.94
--------------------------------------
Access Junction | 2338489.89
--------------------------------------
Tuple Charge | 2447611.81
--------------------------------------
grand total (or |
just null, doesn't| 12,094,119.47
really matter) |
但是,与我尝试的最后一个想法相反,我得到了一个错误消息,它只说:ORA-00923:不是一个单一的组函数
我认为我可能做错了一件事,那就是像查询新专栏一样查询信息,因此它会因此而崩溃,但我不知道如何解决这个问题,也不知道如何通过“谷歌”来获得想法。删除总计。此外,您的查询中有一个小错误:您编写了SUMSUM。。。。那是无效的 如果删除总计,它应该可以工作,如中所示:
SELECT
X_STORE.STORE_NAME AS "store name",
SUM(X_STORE_SALES.WEEKLY_SALES) AS "total weekly sales"
FROM X_STORE
JOIN X_STORE_SALES ON X_STORE.STORE_CODE = X_STORE_SALES.STORE_CODE
GROUP BY STORE_NAME
结果:
store name total weekly sales
----------------- ------------------
Primary Key Point 1,917,166.28
Access Junction 2,338,489.89
Attribute Alley 3,580,977.55
Tuple Charge 2,447,611.81
Database Corner 1,809,873.94
除去总数。此外,您的查询中有一个小错误:您编写了SUMSUM。。。。那是无效的 如果删除总计,它应该可以工作,如中所示:
SELECT
X_STORE.STORE_NAME AS "store name",
SUM(X_STORE_SALES.WEEKLY_SALES) AS "total weekly sales"
FROM X_STORE
JOIN X_STORE_SALES ON X_STORE.STORE_CODE = X_STORE_SALES.STORE_CODE
GROUP BY STORE_NAME
结果:
store name total weekly sales
----------------- ------------------
Primary Key Point 1,917,166.28
Access Junction 2,338,489.89
Attribute Alley 3,580,977.55
Tuple Charge 2,447,611.81
Database Corner 1,809,873.94
您将联接这些表并使用group by获得分组的总和。 然后使用UNION,您将向结果中添加总计:
select
t.store_name,
sum(s.weekly_sales) total_weekly_sales
from x_store t inner join x_store_sales s
on s.store_code = t.store_code
group by t.store_code, t.store_name
union all
select
'grand total',
sum(weekly_sales) total_weekly_sales
from x_store_sales
看。
或更有效地使用CTE:
with cte as (
select
t.store_name,
sum(s.weekly_sales) total_weekly_sales
from x_store t inner join x_store_sales s
on s.store_code = t.store_code
group by t.store_code, t.store_name
)
select * from cte
union all
select
'grand total',
sum(total_weekly_sales)
from cte
您将联接这些表并使用group by获得分组的总和。 然后使用UNION,您将向结果中添加总计:
select
t.store_name,
sum(s.weekly_sales) total_weekly_sales
from x_store t inner join x_store_sales s
on s.store_code = t.store_code
group by t.store_code, t.store_name
union all
select
'grand total',
sum(weekly_sales) total_weekly_sales
from x_store_sales
看。
或更有效地使用CTE:
with cte as (
select
t.store_name,
sum(s.weekly_sales) total_weekly_sales
from x_store t inner join x_store_sales s
on s.store_code = t.store_code
group by t.store_code, t.store_name
)
select * from cte
union all
select
'grand total',
sum(total_weekly_sales)
from cte
如果只需要包含总计的行,请使用分组集:
如果只需要包含总计的行,请使用分组集: