You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ORA-00918列定义模糊报错:查询借书最多最少会员ID与姓名

ORA-00918报错原因及正确实现方案

报错原因

  • 列名歧义:member_id字段同时存在issue与member两张表中,原SQL的SELECT子句未明确指定该字段所属的表,Oracle无法识别字段数据源,直接触发ORA-00918错误。
  • 聚合函数用法错误:Oracle不支持在SELECT子句中直接嵌套MAX(COUNT())这类多层聚合函数的写法;同时原SQL未添加GROUP BY子句,非聚合字段member_id、member_name和聚合函数共同查询时,必须按非聚合字段分组。
  • 逻辑不匹配需求:即使语法修正,原写法也仅能返回最大、最小的借书数值,无法关联返回对应数值所属的用户信息,不符合获取对应用户ID、姓名的需求。

正确实现SQL

如下为适配Oracle语法的实现语句,可同时返回借书数量最多、最少的所有用户(包含并列情况):

WITH member_borrow_cnt AS (
    -- 统计每个用户的借书总量
    SELECT 
        m.member_id,
        m.member_name,
        COUNT(i.issue_id) AS borrow_count
    FROM member m
    LEFT JOIN issue i ON m.member_id = i.member_id
    GROUP BY m.member_id, m.member_name
),
borrow_rank AS (
    -- 对借书量做双向排名
    SELECT 
        member_id,
        member_name,
        borrow_count,
        DENSE_RANK() OVER(ORDER BY borrow_count DESC) AS rank_max,
        DENSE_RANK() OVER(ORDER BY borrow_count ASC) AS rank_min
    FROM member_borrow_cnt
)
-- 取借书量最多、最少的用户
SELECT member_id, member_name, borrow_count
FROM borrow_rank
WHERE rank_max = 1 OR rank_min = 1;

如果仅需要统计有过借书记录的用户,将CTE中的LEFT JOIN替换为INNER JOIN即可。

内容的提问来源于stack exchange,提问作者ARIJIT DASGUPTA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:39:01