我有两张桌子:老师,&类。 这是描述:
TEACHER
----------------
TEACHER_ID
FIRST_NAME
LAST_NAME
TYPE_CODE
HOME_ROOM_NUM
PHONE_NUM
START_DATE
HOME_STATE
SCHOOL_ID
Class
--------------------
CLASS_ID
CLASS_NAME
TEACHER_ID
MAX_SEATS_AVAILABLE
我试图弄清楚如何计算给定教师教授的课程数量。 这是我尝试过的: 1. Lisa Jones教授了多少课程,如果有的话?
SQL> select teacher.last_name, teacher.first_name, class.class_name as
2 from teacher, class
3 where teacher.teacher_id = '2'
4 AND class.teacher_id = '2';
这是我得到的结果:
LAST_NAME FIRST_NAME CLASS_ID CLASS_NAME TEACHER_ID MAX_SEATS_AVAILABLE
----------------- ----------------- -------- -------------------- ----------- --------------------
JONES LISA 2 Basic CALCULUS 2 10
JONES LISA 9 Physics 230 2 20
我只需要教师姓名,身份证明和班级#,没有COUNT功能的运气。
答案 0 :(得分:4)
我建议删除已弃用的隐式连接并替换为标准显式连接:
只需要GROUP BY
即可让COUNT()
正常工作。
SELECT t.last_name, t.first_name, t.Teacher_ID, COUNT(DISTINCT CLASS_ID) as Classes_Count
FROM teacher t
JOIN class c
ON t.Teacher_ID = c.Teacher_ID
WHERE t.Teacher_ID = '2'
GROUP BY t.last_name, t.first_name, t.Teacher_ID
根据数据的性质,您可能需要DISTINCT
,也可能不需要{{1}}。
答案 1 :(得分:0)
我认为@GOAT CO解决方案是正确的。 Thi squery在没有JOIN声明的情况下工作:
select t.last_name, t.first_name, c.class_name, COUNT(DISTINCT c.CLASS_ID) as Classes_Count from teacher t, class c where t.teacher_id = c.teacher_id and t.teacher_id = 1 GROUP BY t.LAST_NAME, t.FIRST_NAME, t.TEACHER_ID;
编辑:现在我为Teacher和Class表添加别名,并将group语句添加到脚本中。你能试试吗?我只在小提琴上测试过。
EDIT2 :同时我检查ORA-00937: not a single-group group function
并找到this和此topic。但是这个脚本没有得到这个例外。如果您修改了声明,请分享!