【发布时间】:2021-09-26 17:14:27
【问题描述】:
在 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
我试图达到的查询结果(显示 IBAN001 正在被 ACC001 和 ACC004 使用):
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
【问题讨论】:
标签: sql oracle join plsql group-by