一段超级复杂的sql语句

select major_name,studentCount,count(b.student_id) as jiuyrenshu ,count(b.student_id)/studentCount
from (select m.major_name, count(s.student_id) as studentCount from student s,class_ c_,major m
where s.class_id in c_.class_id and c_.grade_id = '001' and c_.major_id = '001' and m.major_id=c_.major_id
group by m.major_name) a,(select distinct student_id from employment_register_society
where verify_state=1 union
select distinct student_id from employment_register_school
where verify_state=1) b
group by major_name,studentCount;


这是今天工作中遇到的一个问题,自己写的一段sql语句,写完后,我震惊了,这么长,这么麻烦!

我简单说一下,这段代码用到的关于sql的技术。

首先,是select的关联使用,我记不得这个技术叫什么了,大概的意思通过select查询出来的数据还可以作为一个新表,被select from,

第二点技术是聚分组的技术。count(),将应用于一条数据对应多条数据的情况下,查询多条数据的数量,值得注意的是count如果作为单独被查询的数据,select句尾不用加上group by

但是如果还查询了别的数据字段,就必须加上group by,而且必须把除了count的数据,全部加在group的后面。

第三点就是很简单的union了,大家都知道怎么用,但是看到这么麻烦的sql语句时,我却忘记了去使用它去重,我会告诉你不用union之前代码更加复杂吗!

IT新人,学习中,不惜勿喷!

posted @ 2013-04-09 19:48  艾可儿1314  阅读(1017)  评论(0编辑  收藏  举报