[英]Aggregate function with many-to-many inner join
我有一個foo表,它與BAR表具有一對多的關系。 FOO與QUX也有許多關系。
為了顯示:
FOO
+--------+
| fid |
+--------+
| 1 |
| 2 |
| 3 |
| 4 |
+--------+
BAR
+------+-------+-----+
| bid | cost | fid |
+------+-------+-----+
| 1 | 2 | 1 |
| 2 | 4 | 1 |
| 3 | 8 | 2 |
| 4 | 42 | 3 |
| 5 | 21 | 3 |
| 6 | 5 | 4 |
| 7 | 98 | 2 |
| 8 | 30 | 4 |
+------+-------+-----+
FOOQUX
+------+------+
| fid | qid |
+------+------+
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| 4 | 1 |
+------+------+
QUX
+------+
| qid |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
現在,我想計算每個FOO條目的BAR.cost的總和,但是我想按QUX進行過濾,即“ FOO與QUX的任何元素都有關聯”
我嘗試使用這句話:
SELECT fid, sum(cost)
FROM FOO
INNER JOIN BAR on BAR.fid = FOO.fid
LEFT JOIN FOOQUX ON FOOQUX.fid = FOO.fid
但是,這將為FOOQUX中的每個FOO實例返回一個條目,因此在fid = 2(關聯有兩個QUX)的情況下,成本將是實際值的兩倍。
也許這是一個簡單的問題,但我正在努力解決。
我認為這會對您有所幫助。 按foo.fid分組將保證每個foo記錄及其bar-costs的總和僅出現一次。 Having
過濾匯總記錄的記錄:僅當FOOQUX表包含其fid
才返回記錄。
SELECT fid, SUM(cost)
FROM foo JOIN bar on bar.fid=foo.fid
GROUP BY foo.fid
HAVING foo.fid IN (SELECT fid FROM FOOQUX)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.