SQL Server 中的除法(计算周末事务占总事务的百分比)

问题描述 投票:0回答:1

我需要计算“周末交易百分比”,将周末交易数除以交易总数。 Transaction_data 表的 transaction_date 列当然具有日期数据类型,并且它是外键。为了查找周末的交易数量,我将 transaction_data 表与 Calendar 表连接起来。 不幸的是,这是返回 0 的查询

select (count(transaction_date) / (select count(transaction_date) from Transaction_Data)) * 100 from Transaction_Data t
left join Calendar c on c.Date = t.transaction_date
where c.Weekend = 'Y'

我知道在SQL Server中划分时存在一些问题。从数值上看,周末总交易笔数为76608,总交易笔数为269720, 所以选择 (76608 / 269720.0) * 100 返回正确的输出,即 28.40。正如您所注意到的,我需要添加 .0,否则查询将再次返回 0。 我的问题是如何在 SQL Server 中划分 2 个聚合? 先谢谢了

sql sql-server math arithmetic-expressions
1个回答
0
投票

两个建议:

  1. 除法之前将分子转换为十进制值。正如 Dale 所建议的,这可以通过预先乘以 100.0 来完成。否则,您将执行整数除法,结果可能被截断为零。
  2. 消除子选择并使用条件聚合来计算周末交易数和总交易数。

结果会是这样的

select
    100.00 * count(case when c.Weekend = 'Y' then 1 end)
        / count(*)
        AS WeekendTransactionPercent
from Transaction_Data t
left join Calendar c
    on c.Date = t.transaction_date
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.