我有以下表模式:總和與ID匹配的MySQL
tbl_portfolio
----------
id (auto number)
name
-
tbl_registration
----------------
id(auto number)
name
portfolio_id (FK to tbl_portfolio.id)
-
tbl_fund
---------
id (auto number)
registration_id (FK to tbl_registration.id)
-
tbl_transaction
---------------
id (auto number)
fund_id (FK to tbl_fund.id)
type
shares
price
我需要創建一個查詢,在僞代碼將做到以下幾點:
SELECT port.*, SUM ALL transactions for each portfolio,
FROM tbl_portfolio port
INNER JOIN tbl_registration reg ON reg.portfolio_id = port.id
LEFT JOIN tbl_fund fund on fund.registration_id = reg.id
LEFT JOIN tbl_transaction trans ON trans.fund_id = fund.id
當然現在該查詢將無法正常工作......我所需要主要是總結所有的價格*每個基金單位,然後將這些數據加起來進行每次註冊,然後將所有這些數據進行彙總。
每個投資組合可以有多個註冊,每個註冊可以有多個基金,每個基金可以有多個交易。
最後一個在這裏拋出一個stickler的項目,可能會有10個或100個投資組合計數,所以我不知道如何編寫查詢,更不用依賴子查詢的有效方式編寫它那會導致它的表現嚴重不佳。
謝謝你的幫助!
編輯: PinnyM的答案工程和查詢數據正確 - 但我應該擴大充分的需要。
除了tbl_transaction,還有一個tbl_distri和tbl_div。兩者的fund_id均爲FK至tbl_fund.id。我需要獲取tbl_distri.amount和tbl_div.units的SUM。 所以全僞查詢是東西的效果:
SELECT port.*, SUM ALL transactions for each portfolio, SUM(div.units), SUM(distri.amount)
FROM tbl_portfolio port
INNER JOIN tbl_registration reg ON reg.portfolio_id = port.id
LEFT JOIN tbl_fund fund on fund.registration_id = reg.id
LEFT JOIN tbl_transaction trans ON trans.fund_id = fund.id
LEFT JOIN tbl_distri distri on distri.fund_id = fund.id
LEFT JOIN tbl_div div on div.fund_id = fund.id
......我假設'tbl_fund'中有更多列,或者說有什麼意義?另外,爲什麼要在所有內容上加上'tbl _...'前綴 - 這聽起來太吵了。 –
你需要總結股份數量,價格,還是什麼?也就是說,「總計所有交易」的含義是什麼? – Melanie
如果一個投資組合可以有多個註冊,那麼您從tbl_portfolio到tbl_registration的加入也需要是一個左加註。 – EvilBob22