Oracle查询total_comments统计问题求助:需获取评论总数
嘿,我看你是想查询反馈记录的同时,统计每条反馈对应的评论总数对吧?问题出在你现在的SQL里,外层SELECT引用了total_comments,但你的子查询里根本没定义这个字段,数据库肯定会报「列未找到」的错误。
我给你两种可行的修改方案,你可以根据自己的实际表结构和数据量来选:
方案1:用关联子查询直接计算总数
这种写法比较直观,适合数据量不大的场景:
SELECT customid, dt, customer_name, e_mail, phone, TYPE, message, crm_status_id, -- 这里假设评论表是feedback_comments,关联字段是feedback_id对应customid (SELECT COUNT(*) FROM feedback_comments fc WHERE fc.feedback_id = customid) AS total_comments FROM ( SELECT f.ROWID AS customid, f.dt AS d, To_char(f.dt, 'YYYY-MM-DD HH24:MI:SS') AS dt, f.first_name || ' ' || f.middle_name || ' ' || f.last_name AS customer_name, f.e_mail, f.phone, Decode(f.feedback_type, 'CALLBACK', 'CALLBACK', 'FEEDBACK') AS TYPE, f.feedback_message AS message, f.crm_status_id FROM your_feedback_table f -- 替换成你的反馈表实际名称 ) subquery;
方案2:用LEFT JOIN + GROUP BY统计
如果你的评论数据量比较大,这种方法的性能可能更好,而且能避免重复计数的问题:
SELECT sub.customid, sub.dt, sub.customer_name, sub.e_mail, sub.phone, sub.TYPE, sub.message, sub.crm_status_id, COUNT(fc.comment_id) AS total_comments -- 用评论表的主键计数更准确,避免NULL影响 FROM ( SELECT f.ROWID AS customid, f.dt AS d, To_char(f.dt, 'YYYY-MM-DD HH24:MI:SS') AS dt, f.first_name || ' ' || f.middle_name || ' ' || f.last_name AS customer_name, f.e_mail, f.phone, Decode(f.feedback_type, 'CALLBACK', 'CALLBACK', 'FEEDBACK') AS TYPE, f.feedback_message AS message, f.crm_status_id FROM your_feedback_table f ) sub LEFT JOIN feedback_comments fc ON fc.feedback_id = sub.customid -- 关联评论表 GROUP BY sub.customid, sub.dt, sub.customer_name, sub.e_mail, sub.phone, sub.TYPE, sub.message, sub.crm_status_id;
注意要替换代码里的占位符:比如your_feedback_table是你的反馈表名称,feedback_comments是存储评论的表,feedback_id是评论表中关联反馈表的外键字段,comment_id是评论表的主键字段。如果你的关联逻辑不一样,调整WHERE或JOIN条件就行!
内容的提问来源于stack exchange,提问作者Ayxan Amiraslanli
相关产品推荐
相关产品推荐

