当年销售额占到一半的前 n 个客户

下面是某企业的历史销售合同记录Contract

..

下面为他们的客户信息列表Client

..

某年内按销售额排名的客户,达到一半销售额的前 n 个客户称为该年的“大客户”,请列出 1998 年该企业的大客户名单。

将合同表按客户分组,算出每个客户的总金额并按其降序排列,而后算出总销售额的一半值,最后扫描这个表,途中不断累积销售额,直至达到一半销售额,之前的客户就是“大客户”了。


A

1

=T("Contract.txt").select(year(SellDate)==1998)

2

=T("Client.txt").keys(ID)

3

>A1.switch(Client,A2)

4

=A1.groups(Client;round(sum(Amount),3):Amount).sort(-Amount)

5

=a=0,half=A4.sum(Amount)/2,A4.pselect((a+=Amount,a>=half))

6

=A4.to(A5).(Client.Name)

A1A2分别读出1998年的销售记录和客户信息。

A3做外键关联,将合同表的客户字段替换成客户记录,以便于查找客户的名称。

A4按客户分组聚合,计算出每个客户的总销售额,并按总销售额降序排序:

..

A5先定义累计销售额a的初始值为0half为全部客户销售总额的一半,然后对A4的结果查找,同时累计销售总额,直至累计总额刚好超过全部总和的一半。

A6取出大客户的名单:

..