繁体   English   中英

查找总数为负的用户数

[英]Find the number of users with negative total

我正在尝试为以下解决方案找出 SQL 查询或 Python Pandas 代码。

有 n 个 USER_ID 与各种交易。 每个 USER_ID 都有多个事务。 示例 USER_ID

000e88bb-d302-4fdc-b757-2b1a2c33e7d6
001926be-3245-43fa-86dd-b40ee160b6f9

每个交易都有一个类型

TOPUP
Bank_Transaction
P2P
and a couple more

我想编写一个查询,其中 (TOPUP) -(所有其他类型交易的总和)并返回所有 USER_ID,其中 TOPUP < 所有交易的总和。

查找所有充值较少且支出较多的用户。

我希望我说清楚了吗?

认为充值金额为正而其他支出为负,那么我们只是在寻找余额为负的用户。

select user_id
from transaction
group by user_id
having sum(case when transaction_type = 'TOPUP' then amount else -amount end) < 0

我相信以下内容可能会产生您想要的结果:-

WITH counter AS (
    SELECT user_id
    FROM transactions AS a 
    WHERE 
        coalesce((SELECT sum(amount) FROM transactions WHERE transaction_type = 'TOPUP' AND user_id = a.user_id),0.0) -
            coalesce((SELECT sum(amount) FROM transactions WHERE transaction_type <> 'TOPUP' AND user_id = a.user_id),0.0) 
            < 0      
    GROUP BY user_id
)
SELECT count() FROM counter;
  • 这假设表名是transactions

如果您考虑以下数据:-

INSERT INTO transactions VALUES 
    ('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','TOPUP',25.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','P2P',125.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','BANK-TRANSACTION',75.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','TOPUP',25.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','BANK-TRANSACTION',75.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','TOPUP',25.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','TOPUP',25.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','BANK-TRANSACTION',75.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','TOPUP',25.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','BANK-TRANSACTION',75.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','BANK-TRANSACTION',75.00)
    ,('000e88bb-d302-4fdc-b757-2b1a2c33e7d6','BANK-TRANSACTION',75.00)


    ,('001926be-3245-43fa-86dd-b40ee160b6f9','TOPUP',10.00)
    ,('001926be-3245-43fa-86dd-b40ee160b6f9','TOPUP',10.00)
    ,('001926be-3245-43fa-86dd-b40ee160b6f9','TOPUP',10.00)
    ,('001926be-3245-43fa-86dd-b40ee160b6f9','TOPUP',10.00)
    ,('001926be-3245-43fa-86dd-b40ee160b6f9','TOPUP',10.00)


    ,('XX1926be-3245-43fa-86dd-b40ee160b6f9','P2P',50.00)
    ,('XX1926be-3245-43fa-86dd-b40ee160b6f9','P2P',50.00)
    ,('XX1926be-3245-43fa-86dd-b40ee160b6f9','P2P',50.00)
    ,('XX1926be-3245-43fa-86dd-b40ee160b6f9','P2P',50.00)
    ,('XX1926be-3245-43fa-86dd-b40ee160b6f9','P2P',50.00)
;

那么上面的结果是:-

在此处输入图片说明

  • 即第一个和第三个用户的帐户余额为负,而第二个用户的帐户余额为正(因此被排除在计数之外)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM