我有两张桌子:老师和班级。下面是描述:
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.丽莎·琼斯教了多少课,如果有的话?
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我只需要老师的名字,Id和班级的数量,没有任何幸运与计数函数。
发布于 2013-09-23 10:58:25
我建议取消不推荐使用的隐式连接,代之以标准的显式连接:只需要一个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,这取决于数据的性质。
发布于 2013-09-23 16:00:34
我认为@GOAT解决方案是正确的。这个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;编辑:现在我为教师表和班级表添加别名,并在脚本中添加组语句。你能试试吗?我只在菲德尔上测试过。
这是SQL FIDDLE link.
EDIT2:同时,我查看了ORA-00937: not a single-group group function,找到了this和这个topic。但是这个脚本不会得到这个异常。如果您修改了语句,请分享它!
https://stackoverflow.com/questions/18951095
复制相似问题