【发布时间】:2022-01-24 17:29:44
【问题描述】:
使用 Microsoft SQL Server,我试图获取某人在给定月份完成交易所需的平均天数。
每个用户都有数百笔交易,因此我正在寻找一种方法来计算每个人的交易数量以及每月的平均交易量。我还需要确保删除所有 NULL 返回并将所有负数转换为零,但要保留它。
对于 (Person | Transactions | Average),示例看起来像 (Max | 300 | 12.5)。
我已经做到了:
SELECT
[Transaction],
[NAME],
DATEDIFF (d, [Startdate], [Closedate]) AS Days
FROM
[Table]
WHERE
YEAR ([Startdate]) = 2021
AND MONTH ([Closedate]) = 11
AND Closedate IS NOT NULL
我试图弄清楚如何合并 CASE 语句,但是当我在 DATEDIFF 之前尝试这样做时它不起作用。
【问题讨论】:
-
count(),avg() -
请向minimal reproducible example 提供示例数据、所需结果(均为格式化文本而非图像)和您的尝试。
-
在你的 datediff 函数中使用“d”而不是“day”你什么也没有保存——停止懒惰。但第一步是实际计算每个事务的完成值,因为您需要对其进行平均。我认为你做了一个有风险的假设。假设 StartDate 和 CloseDate 总是在同一个月是否合理?如果没有,请仔细查看您的 where 子句并考虑您实际选择了哪些行。考虑一下交易在 12 月开始并在 1 月结束时会发生什么。
-
您可以将
case表达式用于各种事情,例如Sum( case when SomeColumn < 0 then 0 else SomeColumn end )对列的非负值求和,Sum( case when SomeColumn < 0 then 1 else 0 end )对负值进行计数。
标签: sql sql-server tsql