当前位置: 首页 > 面试题库 >

使用SUM()而不将结果分组

胡修伟
2023-03-14
问题内容

我已经读过(this),但无法找到一种方法来解决我的特定问题。我知道这SUM()是一个聚合函数,不按原样使用它是没有意义的,但是在这种特定情况下,我必须SUM()在保持每一行的同时获取所有结果。

这是桌子:

--ID-- --amount--
  1        23
  2        11
  3        8
  4        7

我需要SUM()数量,但要保留每条记录,因此输出应为:

--ID-- --amount--
  1        49
  2        49
  3        49
  4        49

我有此查询,但它只对每一行求和,而不是对所有结果求和:

SELECT 
    a.id,
    SUM(b.amount)

FROM table1 as a 
JOIN table1 as b ON a.id = b.id
GROUP BY id

没有,SUM()它只会返回一行,但是我需要维护所有ID。

注意:是的,这是一个非常基本的示例,我可以在此处使用php进行此操作,但是显然表更大,并且具有更多的行和列,但这不是重点。


问题答案:
SELECT a.id, b.amount
FROM table1 a
CROSS JOIN
(
    SELECT SUM(amount) amount FROM table1
) b

您需要对表中的每一行之和的值执行笛卡尔连接id。由于subselect(49)只有一个结果,因此基本上只将其附加到每个结果上id



 类似资料:
  • 我有一个带有两个衰减函数(ES 2.4.4)的查询,我使用对查询项中的衰减函数得分求和。对于测试,我使用来防止任何其他分数(来自查询)影响我的分数(我想测试衰减函数)。 这些是我的衰减函数: 我的结果包括2篇不同日期的文章(2017-08-28,2009-05-08)具有相同的优先级(1000)和相同的分数!(13.122)怎么会这样?为什么没有获得更好的分数?所以我试图解释查询。 对于2017-

  • 问题内容: 我有这两张表 每天,无论交易/记录的数量如何,每个uid都将接收入和出的余额值 我想做的就是结合查询结果像这样 但是,当我执行此查询时 它产生无效的结果(SUM是两倍或三倍),我应该如何修改查询以使其不会产生两倍的结果? 问题答案: 首先建立总和,然后加入。像这样: 您拥有的方式,每一个都会与每个匹配项结合在一起,从而使数字相乘。您必须先进行汇总,然后再将 一个 总和与 一个 总和结合

  • 问题内容: 因此,我的数据库包含项目清单: 我还有第二张表,该表将一些标签与项目相关联: 一个项目可能具有与之关联的几个标签(例如5、20和25),因此对于标签表中的每个标签值都有一行。 我希望能够确定某个特定标签是否与某个商品相关联,而又不会丢失所有其他标签数据。例如, 不起作用,因为它消除了包含其他标记值的行(如果tag.id为27,则它不能是特定行上的任何其他值)。 为了解决这个问题,我想使

  • 问题内容: 这一点效果很好: 它将列中的所有字段组加在一起。 我遇到的麻烦是得到此结果来更新另一个表中的另一列。 这就是我所拥有的: 任何建议,不胜感激。 问题答案: 您不能在内部使用update语句。您需要使用子选择进行分组。 像这样的东西:

  • 我正在开发一个使用现有数据库的应用程序,该数据库只能通过存储过程访问。这些SP中的大多数返回来自多个表的列。 我们有一个数据访问层,它从我们的域对象层返回类型的对象。但是,由于SPs返回来自多个表的列,我不确定应该如何构建我的域对象,因为它们中的大多数不会“自然”映射到从SPs返回的数据。 示例:存储过程返回来自“员工”表和“经理”表的列: -员工ID -FirstName -LastName -

  • 问题内容: 我有连接3个表的SQL查询,一个表只是将其他两个表连接起来的多对多表。我使用Spring JDBCResultSetExtractor将ResultSet转换成我的Objects,看起来像这样: ResultSetExtractor实现如下所示: 无需分页即可正常工作。 但是,我需要对这些结果进行分页。我通常的做法是将其添加到查询中,例如: 但是,由于此查询具有联接,因此当我限制结果数