table_department,系表,主键idtable_class,班级表,主键id,字段department_id对应系表的idtable_students,学生表,主键id,字段class_id对应班级表的id现在需要统计每个系的学生数量,生成一个列表,请问sql语句怎么写?

解决方案 »

  1.   

    -- TRY IT ..
    SELECT D.ID,COUNT(1) COUNTS
      FROM TABLE_STUDENTS S,
           TABLE_CLASS C,
           TABLE_DEPARTMENT D
     WHERE S.CLASS_ID = C.ID
       AND C.DEPARTMENT_ID = D.ID
     GROUP BY D.ID;
      

  2.   

    楼上的 count(1) 是什么意思? 不是count(*)吗
      

  3.   


    执行不了,提示"不是group by"表达式
      

  4.   


    SELECT D.ID,D.NAME,COUNT(1) COUNTS
      FROM TABLE_STUDENTS S,
           TABLE_CLASS C,
           TABLE_DEPARTMENT D
     WHERE S.CLASS_ID = C.ID
       AND C.DEPARTMENT_ID = D.ID
     GROUP BY D.ID;为什么多加个系名就不行?那这样行不行,如果两个系id不同,name相同会不会有问题?SELECT D.NAME,D.NAME,COUNT(1) COUNTS
      FROM TABLE_STUDENTS S,
           TABLE_CLASS C,
           TABLE_DEPARTMENT D
     WHERE S.CLASS_ID = C.ID
       AND C.DEPARTMENT_ID = D.ID
     GROUP BY D.NAME;
      

  5.   

    /* Q1:楼上的 count(1) 是什么意思? 不是count(*)吗
    A1:COUNT(1)和COUNT(*)没有什么区别Q2: 执行不了,提示"不是group by"表达式, 为什么多加个系名就不行?
    A2: 如果使用了GROUP BY,那么SELECT中的列必须出现在GROUP BY列中,或者SELECT上的列使用了聚合函数。Q3: 那这样行不行,如果两个系id不同,name相同会不会有问题? 
    A3: 那俺就无语了。Q4:另外请问这种写法效率怎么样,正式环境学生表很大
    A4:其他的高手应该有办法的。呵呵。
    */
    SELECT D.ID,D.NAME,COUNT(1) COUNTS
      FROM TABLE_STUDENTS S,
           TABLE_CLASS C,
           TABLE_DEPARTMENT D
     WHERE S.CLASS_ID = C.ID
       AND C.DEPARTMENT_ID = D.ID
     GROUP BY D.ID,D.NAME;