sql - 从我的表中获取统计信息的 SQL 查询解决方案
问题描述
我一直在尝试从我的表中获取统计信息。在下文中,我试图绘制我的表结构:
在上面,我有我的Transaction表,其中记录了每个用户Profile(profile_id)的每笔交易。此外,我记录了交易创建日期pub_date、transaction_type(类型选项显示在圆圈中)和 transaction amount。创建交易后,我使用适当的Profile(profile_id)为每笔交易提供奖励。
所以,我想从上面的表格中获取日期范围内的统计信息。更确切地说:
- 交易类型为WITHDRAW和WITHDRAW_MANUAL的日期范围内每个配置文件交易的总交易金额。
- 交易类型为DEPOSIT和DEPOSIT_MANUAL的日期范围内每个配置文件交易的总交易金额。
- 日期范围内每个配置文件交易的总奖金总额。
这里选择的日期范围意味着,我会给查询提供startDate和endDate时间段
我可以设法解决1.和2 .. 但是,我找不到方法(对于3.)在日期范围内对每个配置文件的BONUS金额求和。我的解决方案如下:
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_id和profile_id
PS 我的表在 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
有没有必要。
推荐阅读
- r - 如何在R中重复观察n次?
- python - matplotlib中的缩小椭球体
- haskell - 当 a > b 时,为什么 [a..b] 是一个空列表?
- javascript - 如何在多个文件中分解 REACTJS 中的 Axios 调用?
- javascript - 如何使用 Javascript 和 HTML 在同一网站上获取多个视频源?
- google-cloud-platform - SpeechContext 没有“提升”字段
- json - 如何从邮递员的 JSON 对象数组中获取 JSON 对象?
- python - 根据 pandas 数据框中的混合数据类型查找相似行
- python - 为什么python程序无法访问远程路径?
- reactjs - Deck.gl 中的地理配准点云