sql - 使用 PostgreSQL 区分计数

标签 sql postgresql

我正在尝试更改下面查询的计数 DISTINCT 部分,因为当前查询返回的 WINDOW 定义不受支持。使用 PostgreSQL 进行此计算的最无缝方法是什么?谢谢。

SELECT transaction_date, brand, Description, Amount, newval
into temp.table
FROM (SELECT transaction_date, brand, Description, Amount,
         (Amount / count(DISTINCT unique_mem_id) over (partition by to_char(transaction_date, 'YYYY-MM'),brand
         )) as newval
  FROM source.table
 )
WHERE DESCRIPTION iLIKE '%Criteria%';

最佳答案

由于用例,拆分代码似乎更好。

根据以下查询创建表month_brand:

select      to_char(transaction_date, 'YYYY-MM')    as yyyymm
           ,brand
           ,count (distinct unique_mem_id)          as count_distinct_unique_mem_id

from        source.table

group by    yyyymm
           ,brand
;

month_brand 加入您的源表:

select      t.transaction_date, t.brand, t.Description, t.Amount, t.Amount / m.count_distinct_unique_mem_id as newval

from                    source.table    as t

            join        month_brand     as m

            on          m.yyyymm = to_char(t.transaction_date, 'YYYY-MM')    

where       t.description ilike '%Criteria%'
;

代替 count(distinct ...),两阶段解决方案:

  1. 为重复的 unique_mem_id 提供行号
  2. 只计算 row_number = 1 的 unique_mem_id

select  *

into     temp.table

from   (SELECT  transaction_date, brand, Description, Amount, 
                (Amount / count(case rn when 1 then unique_mem_id end) over (partition by to_char(transaction_date, 'YYYY-MM'),brand)) as newval

        FROM    (SELECT     transaction_date, brand, Description, Amount,unique_mem_id
                            row_numner () over (partition by to_char(transaction_date, 'YYYY-MM'),brand,unique_mem_id) as rn

                 FROM       source.table
                 )
        )

WHERE   DESCRIPTION iLIKE '%Criteria%'
;

关于sql - 使用 PostgreSQL 区分计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310628/

相关文章:

c# - ASP MVC 和 postgres

mysql - 将最大值设置为默认值

mysql - SQL从/到特定用户获取最后消息

sql - 子查询返回多列 - 或近似值

postgresql - Postgres 导入双引号值

sql - 使用 JOINS 的 PostgreSQL 反向查询

sql - 在单个查询中插入 2 个表 postgresql

sql - 如何将LONG强制转换为VARCHAR2内联

SQL Server Express 'sa' 登录失败

mysql - 如何测试 SQL 中每个组中列值的顺序(基于时间戳)?