2

我正在使用 Oracle SQL 中的发票数据。我想创建一个变量“迄今为止的中位数帐户发票金额”,它给出了截至给定发票日期的帐户的中位数发票金额。

4

2 回答 2

2

Oracle实际上有一个median功能。要查找每天所有帐户的中位数:

select  median(amount)
from    invoices

或者显示每个帐户每天的中位数:

select  AccountNr
,       to_char(InvoiceDate, 'yyyymmdd')
,       median(amount)
from    invoices
group by
        AccountNr
,       to_char(InvoiceDate, 'yyyymmdd')

或显示“运行中位数”:

select  i1.custID
,       i1.inv_date
,       median(i2.amount)
from    invoices i1
join    invoices i2
on      i2.custId = i1.custID
        and i2.inv_date <= i1.inv_date
group by
        i1.custID
,       i1.inv_date
于 2011-08-28T09:18:51.767 回答
0

据我了解,这就是你所追求的。@Andomar,因为中位数是一系列数字的中间,所以这个系列对结果没有影响。最高和最低之间的中间数字不能改变......

因此,按数据和帐户计算的中位数将是:

select acc_no, median(amount) over ( partition by acc_no, to_char(invoice_date,'yyyymmdd'))
  from invoices
       -- if applicable
 where invoice_date < :date

按帐户计算的中位数是

select acc_no, median(amount) over ( partition by acc_no )
 from invoices
where invoice_date < :date
于 2011-08-28T18:35:26.167 回答