$strsql = " select z.zhuanye,zong,ifnull(jiuye,'0') jiuye,ifnull(linshi,'0') linshi from(select zhuanye,count(*) zong from student where xueyuan = '".$xueyuan."' group by zhuanye) as z left join ( select zhuanye,count(distinct(num)) jiuye from student left join company on student.num=company.stu_num where company.id!='' and xueyuan = '".$xueyuan."' group by zhuanye) as j on z.zhuanye=j.zhuanye left join ( select zhuanye,count(*) linshi from( select num,zhuanye,count(distinct(num)), max(post_type) post_type from student left join company on student.num=company.stu_num where company.id!='' and xueyuan = '".$xueyuan."' group by num,zhuanye)as a where post_type=1 group by zhuanye) as l on z.zhuanye=l.zhuanye";代码解释
时间: 2024-04-22 10:27:21 浏览: 181
SQL Server常用存储过程及示例
这段代码是一个 SQL 查询语句,主要作用是从名为 "student" 的表中查询出特定学院(由变量 $xueyuan 指定)中不同专业的学生数量、就业人数和临时工人数的统计信息。具体解释如下:
- 查询语句由多个子查询组成,每个子查询都只返回一个专业的统计信息。
- 第一个子查询 "z" 统计出每个专业的总学生数,即对 "student" 表按照 "zhuanye" 字段进行分组,再对每组结果进行计数,得出 "zong" 字段。
- 第二个子查询 "j" 统计出每个专业的就业人数,即对 "student" 表和 "company" 表按照 "zhuanye" 字段进行关联,过滤出有就业公司信息的学生,并对每个专业的学生进行去重计数,得出 "jiuye" 字段。这里使用了 "distinct" 关键字和 "count" 函数。
- 第三个子查询 "l" 统计出每个专业的临时工人数,即对 "student" 表和 "company" 表按照 "zhuanye" 字段进行关联,过滤出有就业公司信息的学生,并按照学生和专业进行分组,得出每个学生在该专业中的最高职位类型 "post_type"(1 表示临时工),再对每个专业的学生进行去重计数,得出 "linshi" 字段。这里使用了子查询和 "max" 函数。
最终,这个查询语句返回的结果集包含了每个专业的专业名称、总学生数、就业人数和临时工人数四个字段。其中,如果某个专业的就业人数或临时工人数为 0,则对应字段的值将被设为 "0"(使用了 "ifnull" 函数)。
阅读全文