我们可以说表格是测试:
+--------+------+------+--------+----------+---------------------+---------------------+
| vft_id | v_id | f_id | amount | discount | date_added | date_updated |
+--------+------+------+--------+----------+---------------------+---------------------+
| 1 | 3 | 1 | 1500 | 225 | 2017-07-31 11:11:31 | 2017-07-31 11:11:31 |
| 2 | 3 | 2 | 10 | 0 | 2017-07-31 11:11:31 | 2017-07-31 11:11:31 |
| 3 | 4 | 1 | 1000 | 0 | 2017-07-31 11:11:31 | 2017-07-31 11:11:31 |
| 4 | 4 | 2 | 320 | 15 | 2017-07-31 11:11:31 | 2017-07-31 11:11:31 |
| 5 | 5 | 2 | 1000 | 0 | 2017-07-31 11:12:04 | 2017-07-31 11:12:04 |
| 6 | 5 | 1 | 1000 | 0 | 2017-07-31 11:12:04 | 2017-07-31 11:12:04 |
| 7 | 6 | 2 | 1000 | 0 | 2017-07-31 11:12:04 | 2017-07-31 11:12:04 |
| 8 | 6 | 2 | 1000 | 0 | 2017-07-31 11:12:04 | 2017-07-31 11:12:04 |
+--------+------+------+--------+----------+---------------------+---------------------+
选择查询方案:
1。)如果 v_id 包含 f_id = 1 ,请选择所有 v_id 所以会有三行
+------+
| v_id |
+------+
| 3 |
| 4 |
| 5 |
+------+
2。)现在计算在单个查询或子查询中动态添加所有 v_id(金额 - 折扣),其中 f_id = 1 。 在这种情况下,v_id 3,4和5的f_id = 1。 现在结果是,
+------+--------+
| v_id | amount |
+------+--------+
| 3 | 1295 | //1500+10-225-0
| 4 | 1305 | //1000+320-0-15
| 5 | 1000 | //1000+1000-0-0
+------+--------+
这是我正在使用的查询。
SELECT v_id, (amount-discount) as amount FROM Testing WHERE f_id=1
在检查f_id
的同时,我无法弄清楚如何选择v_id答案 0 :(得分:1)
通过连接到仅包含F_ID为1的V_ID的子查询,我们确保外部查询仅包含V_ID,其中至少有1条记录的F_ID为1。
通过使用汇总,我们可以总和(金额)并减去每个V_ID
的折扣总和SELECT T.V_ID, Sum(T.Amount)-Sum(T.Discount) As Amount
FROM Testing T
INNER JOIN (SELECT V_ID FROM Testing WHERE F_ID = 1) T2
on T2.V_ID = T.V_ID
GROUP BY T.V_ID
我一直在努力解决为什么需要F_ID = 1,但后来认识到你不希望结果中有V_ID 6。
使用where存在将消除我们需要求和的记录,因此连接似乎是合适的。