【问题标题】:SQL to calculate sum of column values and repeat this value over all rows [duplicate]SQL来计算列值的总和并在所有行上重复这个值[重复]
【发布时间】:2017-12-22 10:31:06
【问题描述】:

假设我有一张这样的桌子:

COL1    COL2
ABC     1
DEF     2
GHI     3

我想在新列 COL3 中获得 COL2 的总和:

COL1    COL2   COL3
ABC     1      6
DEF     2      6
GHI     3      6

所以取一个简单的总和是行不通的,因为它只会返回 1 个值,而我希望该值在所有行中重复。

【问题讨论】:

  • SQL Server 还是 MySQL?
  • 它在 MySQL 中。
  • 试试我的更新答案。

标签: mysql sql


【解决方案1】:

试试这个:

SELECT *
  ,(SELECT SUM(Col2) FROM Your_Table) Col3 
FROM Your_Table

在 SQL Server 中试试这个:

SELECT *
  ,SUM(Col2) OVER(ORDER BY(SELECT NULL)) Col3 
FROM Your_Table

【讨论】:

  • 由于某种原因,它只返回了 1 行的总和
  • @vdvaxel,我不明白你的实际问题是什么。
【解决方案2】:

由于您没有指定 dbms,这应该适用于大多数(全部?)dbms(在 sql server 中测试):

DECLARE @T TABLE (Col1 VARCHAR(3), Col2 INT)

INSERT @T (Col1, Col2)
VALUES ( 'ABC' , 1  )
,       ('DEF', 2)
,       ('GHI', 3)  

SELECT  *
FROM    @T
CROSS JOIN (
                SELECT SUM(T.Col2) Col3
                FROM    @T AS T
            ) X

【讨论】:

  • 没有JOIN就不可能吗? (在 MySQL 中)
  • 为什么不想使用连接?
  • 如果我想求和的数字不在表中而是在不同的子查询中怎么办?那时它似乎不起作用。例如,(SELECT ID FROM ...) x,然后是 CROSS JOIN (SELECT SUM(x.ID))。它说'x'是一个未知的表......
  • 不,那行不通。您不能以这种方式在子查询中使用外部查询中的表。你真正想做什么?我感觉你把事情复杂化了。顺便说一句,Dinesh 的回答应该是完全有效的。
【解决方案3】:

虽然你没有提到SQLServer Tag,但我使用MYSQL 服务器解决了它。在 MYSQL Server 中试试这个:

Select t.Col1, t.Col2, t1.Col3 from tbl as t join (Select Sum(Col2) as Col3 from tbl) as t1

查看演示here

【讨论】:

  • 现在,如果我有一个需要从中选择 SUM 的子查询,而不是示例中的单独表 'tbl',该怎么办。那还能用吗?顺便说一句,我正在使用 MySQL
  • @vdvaxel 是的。您可以在括号中使用select Sum(columname) from anyTable。将其命名为 t1。
【解决方案4】:

为了添加两列,您必须执行连接查询。根据您的操作,您必须执行内部联接或外部联接。有关更多描述,您可以查看各自的数据库

【讨论】:

  • 不加入就不行吗?
  • 你想在android或其他平台的什么地方使用它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 2022-12-09
  • 2020-11-28
  • 1970-01-01
相关资源
最近更新 更多