我正在寻找一种根据不同的列减去不同行中数字的方法。我需要检查特定列的值是否始终为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_id
,circle
和inv_number
。我有多个user_ids
和多个circles
并乘以inv_numbers
。因此,inv_number
中circle
中的每个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`);
任何帮助将不胜感激。