簡體   English   中英

如何從一個表中獲取記錄數,並從另一個表中獲取詳細信息

[英]How do I get a count of records from one table with detail from another table

在 Oracle 中,我有兩個表,USER 和 USER_DETAIL。 USER_DETAIL 表有一個到 USER 表的外鍵鏈接,所以非常標准的東西。 USER 表包含 USER_ID 和 ACCOUNT_NUM 字段,而 USER_DETAIL 包含更多數據,例如 USER_ID 和 IBAN。

場景是多個用戶可以擁有相同的 IBAN。 我想要做的是創建一個查詢,顯示多個用戶使用同一個 IBAN 的位置,以及每個 IBAN 的用戶數量和帳號列表。

數據庫表:

USER                    USER_DETAIL
________                ________
USER_ID    ACCOUNT_NUM  USER_ID    IBAN
1,         ACC001       1,         IBAN001
2,         ACC002       2
3,         ACC003       3,         IBAN002
4,         ACC004       4,         IBAN001

我試圖實現的查詢結果(表明 ACC001 和 ACC004 正在使用 IBAN001):

COUNT    IBAN    ACCOUNT_NUM
2        IBAN001 ACC001
                 ACC004

             

讓我困惑的部分是 JOIN 和 GROUP BY。 這適用於獲取計數和 IBAN:

SELECT COUNT(ud.user_id) AS num_users, ud.iban 
FROM user_detail ud
WHERE ud.iban IS NOT NULL
GROUP BY iban
HAVING COUNT(ud.user_id) > 1
ORDER BY ud.iban

但是,當我嘗試加入 USER 表並使用每個 IBAN 顯示所有帳號時,我要么收到“不是 GROUP BY 表達式”錯誤,要么計數丟失:

SELECT COUNT(ud.user_id) AS num_users, ud.iban, u.account_num 
FROM user u 
INNER JOIN user_detail ud USING (user_id)
WHERE ud.iban IS NOT NULL
GROUP BY ud.iban, u.account_num
HAVING COUNT(ud.user_id) > 1
ORDER BY ud.iban

如果我理解正確,您希望LISTAGG()在聚合結果中將帳戶組合在一起:

SELECT ud.iban, COUNT(*) as num_users,
       LISTAGG(u.account_num, ',') WITHIN GROUP (ORDER BY u.account_num)
FROM user u INNER JOIN
     user_detail ud
     USING (user_id)
WHERE ud.iban IS NOT NULL
GROUP BY ud.iban
HAVING COUNT(*) > 1
ORDER BY ud.iban

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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