MySQL:根据不同的列减去不同的行

我正在寻找一种根据不同的列减去不同行中数字的方法。我需要检查特定列的值是否始终为0。下面我举一个例子,以便于理解:

| user_id | circle | inv_number | status | account |
|---------|--------|------------|--------|---------|
| 100     | 001    | 0000010    | A      | 2000    |
| 100     | 001    | 0000010    | B      | -1500   |
| 100     | 001    | 0000010    | B      | -500    |
| 100     | 002    | 0000022    | A      | 3000    |
| 100     | 002    | 0000022    | B      | -500    |
| 100     | 002    | 0000022    | B      | -500    |
| 100     | 002    | 0000022    | B      | -500    |
| 100     | 002    | 0000022    | B      | -1000   |

您可以在表格内看到我有一个id=100用户。我也有两个不同的圈子。对于此示例,您无需了解圆的含义。无论如何,我也有一个inv_number和一个status。该状态始终显示'A''B'。如果现在执行'A' - 'B',则得到inv_number 0000010的值为0。如果我对inv_number 0000022做同样的事情,我会得到500作为结果。

现在,我需要查看所有结果,其中account字段不是0。因此,在我的示例中,结果应如下所示:

| user_id | circle | inv_number | status | account |
|---------|--------|------------|--------|---------|
| 100     | 002    | 0000022    | C      | 500     |

有人可以举例说明如何实现这一目标吗? 请注意:减法取决于列user_idcircleinv_number。我有多个user_ids和多个circles并乘以inv_numbers。因此,inv_numbercircle中的每个user_id都应使用'A'-'B'减法。

我尝试了一个subselect语句,但是它不起作用,因为我知道我的sql语句中缺少一些信息,例如status

SELECT 
    *
FROM
    TABLENAME as t1

    LEFT JOIN TABLENAME2 as t2
        on t1.`user_id`=t2.`user_id`
        and t1.`circle`=t2.`circle`
        and t1.`inv_number`=t2.`inv_number`
WHERE
    `account` = (SELECT SUM((`inv_number`)-(`inv_number`)) AS total FROM TABLENAME2 GROUP BY t1.`user_id`,t1.`circle`,t1.`inv_number`);

任何帮助将不胜感激。

zkshow 回答:MySQL:根据不同的列减去不同的行

使用聚合:

select user_id,circle,inv_number,'C' as status,sum(account) as net
from t
where status in ('A','B')  -- not sure if this is necessary
group by user_id,having sum(account) <> 0;

这将对account列求和,并且仅保留user_idcircleinv_number的组合,而总和不是0

本文链接:https://www.f2er.com/3166594.html

大家都在问