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新人,学习中,不惜勿喷!