现在有三张表,一张是学生表,学号是唯一索引,二是学生签到表,学生每次签到都一条记录,三是学生留言表,每次留言都有一条记录,现在想查询学生信息,并统计出每个学生签到和留言的总数作为一个字段total加到学生信息中,并根据total降序排序,用一条sql语句怎么做到啊,新学mysql,不懂,求大神们帮帮忙? |
|
10分 |
select 学号,count(签到)+ count(留言) as total from 学生 a,签到 b,留言 c on a.学号 = b.学号 and a.学号 = c.学号 group by 学号 order by total desc |
写错了,on改成where |
|
— 学生表A ,签到B,留言C
UPDATE A SET A.total = B.total INNER JOIN ( SELECT B.studentnum,(B.count(*)+C.count(*)) AS total FROM B,C WHERE B.studentnum = C.studentnum) D ON A.studentnum = D.studentnum; |
|
10分 |
UPDATE A |
谢谢你们的回复,按照1#(不知道怎么直接在1#回复)的运行,需要学生同时签到并且有留言才可以实现,可是有些学生是没有留言的。3#的我看不懂。我自己写的:
select s.*,from stu s order by (select count(c.id) from check c where c.stuid = s.stuid)+(select count(l.id) from liuyan l where l.stuid = s.stuid) desc 不知道可以吗? |
|
total就不知道怎么写,所以就不要了
|
|
10分 |
不用啊,没有留言的话,count出来会是0的,不影响。 |
10分 |
select s.stuid, s.Nmae,
(select count(*) from check where stuid = s.stuid) + (select count(*) from liuyan where stuid = s.stuid) from stu s order by 3 desc |
多表查询,如果要查询的字段不止一个表中有,应指定是哪个表中的字段。应指定“学号”是哪个表的 |