簡體   English   中英

具有多對多內部聯接的聚合函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM