2017-04-10 36 views
1

我有兩個表:account_table和branch_table。在參考表中計算並分組,並選擇其他屬性

create table branch_table(
    id int, 
    address varchar 
); 

create table account_table(
    accid int, 
    balance int, 
    type varchar, 
    branch_ref ref branch_type 
branch_ref SCOPE IS branch_table 
); 

如何列出每個分支類型爲'saving'的賬戶數量,並選擇該分支的地址?

+0

你可以通過使用Join和Aggregate函數來實現。 –

+0

嘗試使用'id'和'address'分組 –

+0

對不起,我寫了一個答案,然後才注意到您正在使用Oracle的面向對象的功能。我不知道如何從這些表中選擇,並在互聯網上幾乎找不到任何東西。如果您剛剛開始,則可能需要使用經典關係,即account_table中的branch_table_id。然後它只是簡單的標準SQL連接和聚合。用我猜想的經典模型在互聯網上尋求幫助會容易得多。 –

回答

0
SELECT b.address,COUNT(*) AS no_of_accts 
    FROM account_table a 
INNER JOIN 
     branch_table b 
    ON a.branch_ref = b.id 
WHERE a.type = 'saving' 
GROUP BY b.address; 
+0

它告訴我:SQL錯誤:ORA-22950:無法使用MAP或ORDER方法排列對象 22950. 00000 - 「無法使用MAP或ORDER方法排列ORDER對象」 *原因:對象類型必須定義MAP或ORDER方法爲 除平等和不平等比較之外的所有比較。 *操作:爲對象類型定義MAP或ORDER方法 –

0

對於每個分支都會有唯一的地址,我們可以通過運行在這兩個欄目做組,或者我們可以通過branchid做組,然後取地址,這並不改變任何事情的最大值。並且還需要按帳戶類型進行分組以獲取類型明智的詳細信息。

SELECT b.id, b.address,COUNT(accid) no_of_accts 
    FROM account_table a 
INNER JOIN 
     branch_table b 
    ON a.branch_ref = b.id 
WHERE a.type = 'saving' 
GROUP BY b.id,b.address,a.type; 
+0

爲什麼選擇max(b.address)?作爲地址是沒有意義的,因爲地址是一個varchar –

+0

不管它在哪裏都是數字或varchar來使用函數的max,但是在這裏我已經使用了它,因爲每個分支的id都有,所以你將得到唯一的分支地址,在我的團隊中,我把這個作爲最大的地址。如果我們保持它也沒有區別...現在我已經改變它,你現在可以嘗試。 – Rams

+0

謝謝。但是,在這兩種情況下,我都會得到這樣的映射錯誤:SQL錯誤:ORA-22950:無法使用MAP或ORDER方法排列ORDER對象 22950. 00000 - 「無法使用MAP或ORDER方法排列ORDER對象」 *原因:對象類型必須MAP或ORDER方法定義的 所有比較除了平等和不平等比較。 *操作:爲對象類型定義MAP或ORDER方法 –

相關問題