SQL查询如何统计每张发票对应的唯一账号数量
问题根因
你当前查询的GROUP BY同时用了gl.source和gl.account_number作为分组键,返回结果的粒度是「单张发票+单个关联账号」,每个分组仅对应1个唯一账号,因此计数值恒为1,无法统计单张发票关联的账号总量。
修正写法
场景1:仅需返回发票维度的总账号数
不需要返回明细账号的话,直接把gl.account_number从分组字段、返回字段中移除,建议用COUNT(DISTINCT)做去重计数,避免同账号重复关联导致统计偏差:
SELECT gl.source, COUNT(DISTINCT gl.account_number) AS 'Count of Invoices' FROM gl WHERE gl.source = *invoice number* GROUP BY gl.source
执行后关联5个账号的发票,对应计数值就会正确显示为5。
场景2:需要同时保留账号明细+发票总账号数
如果要在结果里同时展示每个关联账号的明细,又要每行附带当前发票的总账号计数,用窗口函数实现即可,不需要调整分组粒度:
SELECT gl.source, COUNT(DISTINCT gl.account_number) OVER (PARTITION BY gl.source) AS 'Count of Invoices', gl.account_number FROM gl WHERE gl.source = *invoice number*
提示:如果确认业务中不存在单发票对同账号的重复关联记录,可以省略
DISTINCT关键字,直接用COUNT(gl.account_number)统计,查询效率会更高。
内容的提问来源于stack exchange,提问作者boomk90
相关产品推荐
相关产品推荐

