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

在t-sql中乘行

唐声
2023-03-14
问题内容

我有下表

 ID     Number    
----------------     
   1       41.5
   2       42.5
   3       43.5
   2       44.5   
   2       45.5
   1       46.5
   1       47.5

我需要编写一个查询,该查询将返回不同的ID和对应的Number列值相乘。对于给定的表结果应该是这样的

ID       Result 
-----------------
  1         41.5 * 46.5 * 47.5
  2         42.5 * 44.5 * 45.5
  3         etc...

(不使用游标)


问题答案:
SELECT Id, EXP(SUM(LOG(Number))) as Result
FROM Scores 
GROUP BY id

这将适用于正数,也可以乘以负数,也可以使用ABS()函数使用绝对(正)值,但最终结果将是正数,而不是负数:

SELECT Id, EXP(SUM(LOG(ABS(Number)))) as Result
FROM Scores 
GROUP BY id

编辑:添加了测试脚本

DECLARE @data TABLE(id int, number float)

INSERT INTO @data VALUES
(1, 2.2),
(1, 10),
(2, -5.5),
(2, 10)

SELECT Id, EXP(SUM(LOG(ABS(Number)))) as Result 
FROM @data GROUP BY id

输出:

1   22
2   55


 类似资料:
  • 问题内容: 我创建了一个C#类来解密使用T-SQL的EncryptByPassPhrase加密的字节数组。(是的,我知道我可以在SQL Server中解密,但是我需要的是能够在数据库层和中间层中等效地进行加密/解密。) 我了解SQLServer的EncryptByPassPhrase和DecryptByPassPhrase使用TripleDES对称密钥算法。但是,对于我来说不清楚IV应该如何模拟S

  • 问题内容: 我只想验证用户的给定输入 即使日期有效,该日期也将返回false,因为日期为澳大利亚格式 我可以将最后一行更改为以下内容 它的工作原理。但是,如果@Userinput是垃圾(即:-‘hello’),则最后一条语句将失败。无论用户输入什么内容,我怎样才能得到一个能验证为澳大利亚日期(dd / mm / yyyy)的东西? 谢谢 问题答案: 使用 SET DATEFORMAT 指定您希望输

  • 我使用的是SQL Server 2012,我知道计算移动平均值非常简单。但我需要的是得到一个定义的窗口框架的模式和中位数,比如(在当前行之前有一个2的窗口;月份唯一): 如果有几个值符合模式,则选择第一个值。

  • 问题内容: 我在需要转换为SQL Server的旧报表中遇到了这一行。 ExamCodes是源代码,而learninger_code是模式。我知道SQL Server没有REGEXP_LIKE,大多数地方都告诉您使用PATINDEX。 我在想这会起作用: 但是我得到了错误: 在MSDN上,语法指定为 但是learninger_code是一个字段,我无法指定模式吗? 我最初没有写此报告,所以我还是对

  • 问题内容: 我的数据库应用程序将部署在不同时区的多个站点上。 我需要一个T-SQL函数,该函数将确定YTD计算本年1月1日午夜的UTC时间戳。所有数据都存储在UTC时间戳中。 例如,芝加哥是具有夏令时(DST)的UTC-6,如果该功能在2008年的任何时间在芝加哥运行,则该函数需要返回“ 2008-01-01 06:00:00”。如果明年在纽约(GMT-5 + DST)运行,则需要返回“ 2009

  • MS SQL 有许多用于处理数字数据或字符串的内置函数。下面给出的列表包含有用的 SQL 内置函数: SQL Server COUNT 函数 - SQL Server COUNT 聚合函数用于计算数据库表中的行数。 SQL Server Max 函数 - SQL 中的 Max Aggregate 函数允许我们选择列的最大值。 SQL Server Min 函数 - SQL 中的 Min Aggre