用于从我的表中获取统计信息的 SQL 查询解决方案

标签 sql postgresql

我一直在尝试从我的表中获取统计信息。在下文中,我尝试绘制我的表结构: enter image description here

在上面,我有我的Transaction 表,其中记录了每个用户Profile(profile_id) 的每笔交易。此外,我记录交易创建日期pub_datetransaction_type(类型选项显示在圆圈中)和交易金额。创建交易后,我会通过适当的Profile(profile_id) 为每笔交易提供Bonus

所以,我想在日期范围内从上面的表格中获取统计信息。更准确地说:

  1. transaction_typeWITHDRAWWITHDRAW_MANUAL 的日期范围内每个配置文件交易的总交易总金额>.
  2. transaction_typeDEPOSITDEPOSIT_MANUAL 的日期范围内每个个人资料交易的总交易总金额>.
  3. 日期范围内每笔个人资料交易的总奖金总金额

在视觉上,我想要这个结果。 enter image description here

这里选择的日期范围意味着,我将给查询提供startDateendDate 时间段

我可以设法解决1.2.。但是,我找不到方法(对于 3.)在日期范围内对每个配置文件的 BONUS 金额进行 SUM。我的解决方案如下:

 SELECT  mtd.profile_id, sum(mtd.amount) AS summa_deposit, 
  (
        SELECT sum(mtw.amount) AS summa_withdraw
        FROM public.main_transaction AS mtw 
        WHERE mtw.profile_id=mtd.profile_id AND mtw.pub_date>='2017-01-01' AND mtw.pub_date<='2017-10-01' AND mtw.transaction_type IN ('WITHDRAW','WITHDRAW_MANUAL')
    )
FROM public.main_transaction AS mtd
WHERE mtd.pub_date>='2017-01-01' AND mtd.pub_date<='2017-10-01' AND mtd.transaction_type IN ('DEPOSIT','DEPOSIT_MANUAL') 
GROUP BY  mtd.profile_id
ORDER BY mtd.profile_id;

获取每个个人资料奖金的总额在这里不是问题。问题是要在日期范围 内获得这些金额。因为,我没有将日期记录到我的 Bonus 表中。我只有我的 transaction_idprofile_id

附言我的表在 PostGreSQL 中。

最佳答案

您是否只需要在子查询中加入另一个join

(SELECT SUM(b.amount) AS summa_bonus
 FROM public.bonus b JOIN
      public.main_transaction mtw 
      ON b.transaction_id = mtw.id
 WHERE mtw.profile_id = mtd.profile_id AND
       mtw.pub_date >= '2017-01-01' AND
       mtw.pub_date <= '2017-10-01' AND
       mtw.transaction_type IN ('WITHDRAW', 'WITHDRAW_MANUAL')
)

我不知道 transaction_type 上的过滤器是否有必要。

关于用于从我的表中获取统计信息的 SQL 查询解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536773/

相关文章:

mysql - 如何在 SQL (ms Access) 中的同一行中添加多个字段?

sql - 无法添加过滤索引但不明白为什么

postgresql - 使用 NetTopologySuite 与 EF Core 和 postgis 计算两点之间的地理距离

python - 使用 map 代数运算在 PostGIS 中进行简单的减法

php - 在数据库 MYSQL 中插入数据,数据混合

c# - 需要从 C# 中的存储过程返回值

postgresql - 按日期和当天总持续时间的总和分组

java - 如何使用具有多个连接的 SQL 查询并使用 hibernate 计数

mysql - 我如何获取 SQL 中新插入行的主键值,它应该适用于所有 SQL 库

sql - 在 PostgreSQL 中插入带单引号的文本