用到两个表,teacher,student和graduatedStudent,分别是老师,学生,已毕业学生teacher的字段和值如下:
id name sex
1 王老师 男
2 李老师 男
3 余老师 女
4 张老师 女
student的字段和值如下:
id name teacherId
1 张三 1
2 李四 1
3 王五 2
4 宋六 1
6 郑七 2
7 郑八 3
8 郑九 3
9 郑十 3graduatedStudent的字段和值如下:
id time isGraduated
1 2010 true
3 2000 true
4 2003 true我想查出所有老师的资料,但按照已所教的毕业学生数量由少到多排序。
比如此列就显示为:
id name sex
1 张老师 女
2 余老师 女
3 李老师 男
4 王老师 男刚才两位兄台懂的哈
谢谢!
id name sex
1 王老师 男
2 李老师 男
3 余老师 女
4 张老师 女
student的字段和值如下:
id name teacherId
1 张三 1
2 李四 1
3 王五 2
4 宋六 1
6 郑七 2
7 郑八 3
8 郑九 3
9 郑十 3graduatedStudent的字段和值如下:
id time isGraduated
1 2010 true
3 2000 true
4 2003 true我想查出所有老师的资料,但按照已所教的毕业学生数量由少到多排序。
比如此列就显示为:
id name sex
1 张老师 女
2 余老师 女
3 李老师 男
4 王老师 男刚才两位兄台懂的哈
谢谢!
解决方案 »
- between 问题
- 请问哈.我有几道SQL题不会.想请教哈各位高手.
- 求sql:按相同日期分组并显示组号
- 如何知道数据库当前有几个连接?
- ******高手请教:这个存储过程怎么实现?*********
- VS2005中添加数据源 加载MS SQL Server 数据库文件显示error: 25 - 连接字符串无效与 error: 26 定位指定的服务器/实例时出错的问题?
- 不能设置ODBC的DNS?
- 如何实现sql server中的全文检索,并且是中文的全文检索?(万分火急,速回答,速给分)
- [讨论]取得某一条数据在数据集中的定位
- ???请问各位高手,能否在存储过程更改记录时不产生日志文件???(在线,解决立刻给分)
- 事务问题,请大家帮忙解释下,分不多
- 疑问:如何复制数据
(id int, name varchar(10), sex varchar(4))
insert into teacher
select 1, '王老师', '男' union all
select 2, '李老师', '男' union all
select 3, '余老师', '女' union all
select 4, '张老师', '女'
create table student
(id int, name varchar(10), teacherId int)
insert into student
select 1, '张三', 1 union all
select 2, '李四', 1 union all
select 3, '王五', 2 union all
select 4, '宋六', 1 union all
select 5, '郑七', 3
CREATE TABLE graduatedStudent(id INT, TIME DATE ,isGraduated VARCHAR(10))
INSERT INTO graduatedStudent
SELECT 1, '2010', 'true'
UNION ALL
SELECT 3, '2000' ,'true'
UNION ALL
SELECT 4, '2003' ,'true'
select a.*
from teacher a inner join (select teacherid,count(1) [数量] from student a INNER JOIN graduatedStudent b ON
a.id=b.id WHERE isGraduated='true'
group by teacherid) b on a.id=b.teacherId
order by b.[数量]
/*
id name sex
----------- ---------- ----
2 李老师 男
1 王老师 男
(2 行受影响)
*/
(id int, name varchar(10), sex varchar(4))
insert into teacher
select 1, '王老师', '男' union all
select 2, '李老师', '男' union all
select 3, '余老师', '女' union all
select 4, '张老师', '女'
create table student
(id int, name varchar(10), teacherId int)
insert into student
select 1, '张三', 1 union all
select 2, '李四', 1 union all
select 3, '王五', 2 union all
select 4, '宋六', 1 union all
select 5, '郑七', 3
CREATE TABLE graduatedStudent(id INT, TIME DATETIME ,isGraduated VARCHAR(10))
INSERT INTO graduatedStudent
SELECT 1, '2010', 'true'
UNION ALL
SELECT 3, '2000' ,'true'
UNION ALL
SELECT 4, '2003' ,'true'
select t.*,isnull(rn,0) as rn
from
teacher t left join
(
SELECT teacherId,count(teacherId) as rn
from student s left join graduatedStudent g on s.id=g.id
and isGraduated='true'
group by teacherId
) r on t.id=r.teacherIdorder by isnull(rn,0)/*id name sex rn
----------- ---------- ---- -----------
4 张老师 女 0
2 李老师 男 1
3 余老师 女 1
1 王老师 男 3