oracle 如何选择所有列以及求和结果

q3qa4bjr  于 2023-01-25  发布在  Oracle
关注(0)|答案(4)|浏览(121)

我有这个选择:
“从表中选择 *”,返回:
| 身份证|价值|
| - ------|- ------|
| 1个|1个|
| 1个|1个|
| 第二章|十个|
| 第二章|十个|
我的目标是按id从每个值组创建一个总和,如下所示:
| 身份证|价值|总计|
| - ------|- ------|- ------|
| 1个|1个|第二章|
| 1个|1个|第二章|
| 第二章|十个|二十个|
| 第二章|十个|二十个|
我尝试过的方法如下:
从表v中选择Id、值,(从表V2中选择总和(值),其中V2.Id= V.Id分组依据IDRNC);
但不是按id分组。
| 身份证|价值|总计|
| - ------|- ------|- ------|
| 1个|1个|1个|
| 1个|1个|1个|
| 第二章|十个|十个|
| 第二章|十个|十个|

jgwigjjp

jgwigjjp1#

聚集聚集行,减少输出中的记录数。在这种情况下,您希望将计算结果应用于每条记录,此任务由相应的窗口函数执行。

SELECT table.*, SUM(Value) OVER(PARTITION BY Id) AS sum_
FROM table

检查here演示。

dnph8jn4

dnph8jn42#

您的尝试看起来正确。是否可以尝试以下查询:
这对我很有效:

SELECT Id, Value, 
(SELECT SUM(Value) FROM Table V2 WHERE V2.Id= V.Id GROUP BY ID) as sum 
FROM Table v;

qfe3c7zg

qfe3c7zg3#

您可以使用inner join来连接按id分组的选择:

select t.*, sum
from _table t
inner join (
  select id, sum(Value) as sum
  from _table
  group by id
) as s on s.id = t.id

You can check it here

n7taea2i

n7taea2i4#

您的选择是可以的,如果你调整它只是一点点:

SELECT Id,Value, (SELECT SUM(Value) FROM Table V2 WHERE V2.Id= V.Id GROUP BY IDRNC ) FROM Table v;
  1. GROUP BY IDRNC错误,应为GROUP BY ID
    1.应该给求和列一个别名...
    1.选择总和的子查询不必具有self表别名,才能与具有self表别名的外部查询进行比较(这不是错误-两种方式都有效)
    试验:
WITH
    a_table (ID, VALUE) AS
        (
            Select 1, 1 From Dual Union All
            Select 1, 1 From Dual Union All
            Select 2, 10 From Dual Union All
            Select 2, 10 From Dual
        )
SELECT ID, VALUE, (SELECT SUM(VALUE) FROM a_table WHERE ID = v.ID GROUP BY ID) "ID_SUM" FROM a_table v;

        ID      VALUE     ID_SUM
---------- ---------- ----------
         1          1          2 
         1          1          2 
         2         10         20 
         2         10         20

相关问题