Você está na página 1de 2

Assignment 2a: More SQL: Aggregates

Session 2: Intermediate SQL: Aggregates and grouping and ordering


1. Find the number of instructors who have never taught any course. If the result

of your query is empty, add appropriate data (and include corresponding insert statements) to ensure the result is not empty.
Select count(instructor.id) from instructor where instructor.id not in(select teaches.id from teaches) group by instructor.id;
2. Find the total capacity of every building in the university

select sum(capacity),building from classroom group by building;

3. Find the maximum number of teachers for any single course section. Your output should be a single number. For example if CS-101 section 1 in Spring 2012 had 3 instructors teaching the course, and no other section had more instructors teaching the section, your answer would be 3.
select count(instructor.id)from instructor,teaches where instructor.id=teaches.id group by course_id,sec_id order by count(instructor.id) desc limit 1;
4. Find all departments that have at least one instructor, and list the names of the

departments along with the number of instructors; order the result in descending order of number of instructors.
select count(id),department.dept_name from instructor,department where instructor.dept_name=department.dept_name group by department.dept_name having count(id)>0 order by count(id) DESC;
5. As in the previous question, but this time you shouold include departments

even if they do not have any instructor, with the count as 0


insert into department values('Mechanical','xyz','40000.00'); select count(id),department.dept_name from department left outer join instructor on instructor.dept_name=department.dept_name group by department.dept_name having count(id)>=0 order by count(id) DESC;
6. For each student, compute the total credits they have successfully completed,

i.e. total credits of courses they have taken, for which they have a non-null

grade other than 'F'. Do NOT use the tot_creds attribute of student.
select DISTINCT student.id,sum(DISTINCT course.credits) from student,takes,section,course where course.course_id=section.course_id and section.course_id=takes.course_id and takes.id=student.id and takes.grade!='F' group by student.id;
7. Find the number of students who have been taught (at any time) by an

instructor named 'Srinivasan'. Make sure you count a student only once even if the student has taken more than one course from Srinivasan.
select count(DISTINCT student.id),student.name from student,advisor,instructor where student.id=advisor.s_id and advisor.i_id=instructor.id and instructor.name='Srinivasan' group by student.name;

Optional
8. Find the name of all instructors who get the highest salary in their department.

select max(salary),dept_name from instructor group by dept_name;


9. Find all students who have taken all courses taken by instructor 'Srinivasan'.

(This is the division operation of relational algebra.) You can implement it by counting the number of courses taught by Srinivasan, and for each student (i.e. group by student), find the number of courses taken by that student, which were taught by Srinivasan. Make sure to count each course ID only once.
select count(student.id),teaches.course_id from student,instructor,takes,teaches where instructor.id=teaches.id and teaches.course_id=takes.course_id and takes.id=student.id and instructor.name='Srinivasan' group by teaches.course_id;
10.

Find the total money spent by each department for salaries of instructors of that department.

select sum(salary),dept_name from instructor group by dept_name;

11. Find the names of all students whose advisor has taught the maximum number of courses (multiple offerings of a course count as only 1). (Note: this is a complex query, break it into parts by using the with clause.)
select student.name,max(teaches.course_id) from student,advisor,instructor,teaches where student.id=advisor.s_id and advisor.i_id=instructor.id and instructor.id=teaches.id group by student.name;

Submission status
Submission status Grading status Due date Time remaining Nothing has been submitted for this assignment Not graded Friday, 24 May 2013, 10:00 AM 1 day 21 hours

Você também pode gostar