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