[英]mysql complicated select query
lets just say table is Testing : 可以说表正在测试中 :
+--------+------+------+--------+----------+---------------------+---------------------+
| 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 |
+--------+------+------+--------+----------+---------------------+---------------------+
Select query scenario : 选择查询方案:
1.) select all v_id if v_id contains f_id=1 so there would be three rows 1.)如果v_id包含f_id = 1 ,则选择所有v_id ,因此会有三行
+------+
| v_id |
+------+
| 3 |
| 4 |
| 5 |
+------+
2.) now calculate add all v_id (amount - discount) which also has f_id=1 dynamically in single query or sub query. 2.)现在计算添加所有v_id(金额-折扣) ,在单个查询或子查询中动态添加f_id = 1 。 In this case v_id 3,4 and 5 has f_id=1.
在这种情况下,v_id 3,4和5具有f_id = 1。 Now the result would be,
现在的结果是,
+------+--------+
| v_id | amount |
+------+--------+
| 3 | 1295 | //1500+10-225-0
| 4 | 1305 | //1000+320-0-15
| 5 | 1000 | //1000+1000-0-0
+------+--------+
This is the query which I am using. 这是我正在使用的查询。
SELECT v_id, (amount-discount) as amount FROM Testing WHERE f_id=1
I can't figure it out how to select v_id while also checking f_id 我不知道如何选择v_id并同时检查f_id
By joining to a subquery which contains only V_ID which have a F_ID of 1, we ensure the outer query only contains V_IDs for which at least 1 record had a F_ID of 1. 通过加入仅包含F_ID为1的V_ID的子查询,我们确保外部查询仅包含至少1条记录的F_ID为1的V_ID。
By using aggregation we can sum(amount) and subtract sum of discounts for each V_ID 通过使用聚合,我们可以求和(金额)并减去每个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
I was struggling with why F_ID = 1 was needed but then recognized you didn't want V_ID 6 in the results. 我在为为什么需要F_ID = 1而苦苦挣扎,但后来意识到您不希望V_ID 6出现在结果中。
Using a where exists would eliminate records we needed to sum, thus a join seemed appropriate. 使用where存在将消除我们需要求和的记录,因此联接似乎是合适的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.