部门表 table1(部门、姓名、职务、薪水),查询各个开发部的程序员,和各个维护部的维护工程师薪水在1000元以上的超过10个人的部门的总个数。

解决方案 »

  1.   

    SELECT COUNT(姓名) AS 开发部的程序员个数,部门表.部门,职务 FROM 部门表
    LEFT JOIN (SELECT 部门,COUNT(姓名) AS 人数 FROM 部门表 GROUP BY 部门) AS 各部门人数 ON 各部门人数.部门=部门表.部门
    WHERE 薪水>1000 AND 各部门人数.人数>10 AND 部门表.部门='开发部' AND 职务='程序员'
    GROUP BY 部门表.部门,职务SELECT COUNT(姓名) AS 维护部的维护工程师个数,部门表.部门,职务 FROM 部门表
    LEFT JOIN (SELECT 部门,COUNT(姓名) AS 人数 FROM 部门表 GROUP BY 部门) AS 各部门人数 ON 各部门人数.部门=部门表.部门
    WHERE 薪水>1000 AND 各部门人数.人数>10 AND 部门表.部门='维护部' AND 职务='维护工程师'
    GROUP BY 部门表.部门,职务
      

  2.   

    CREATE TABLE department (deptname nvarchar(16), empname varchar(8), occu varchar(8), salary numeric(12,2))SELECT deptname, cnt = COUNT(*)
      FROM department
      WHERE salary > 1000
        AND (deptname LIKE '%开发部%' OR deptname LIKE '%维护部%')
      GROUP BY deptname HAVING COUNT(*) > 10
      

  3.   

    这是两次查询吗?可以改用一条查询的。
    SELECT DISTINCT 开发部的程序员个数.人数,维护部的维护工程师个数.人数,部门表.部门,部门表.职务 FROM 部门表
    LEFT JOIN (SELECT 部门,COUNT(姓名) AS 人数 FROM 部门表 GROUP BY 部门) AS 各部门人数 ON 各部门人数.部门=部门表.部门
    LEFT JOIN (SELECT 部门,职务,COUNT(姓名) AS 人数 FROM 部门表 WHERE 部门='开发部' AND 职务='程序员' GROUP BY 部门,职务) AS 开发部的程序员个数 
    ON 开发部的程序员个数.部门=部门表.部门 AND 开发部的程序员个数.职务=部门表.职务
    LEFT JOIN (SELECT 部门,职务,COUNT(姓名) AS 人数 FROM 部门表 WHERE 部门='维护部' AND 职务='维护工程师' GROUP BY 部门,职务) AS 维护部的维护工程师个数 
    ON 维护部的维护工程师个数.部门=部门表.部门 AND 维护部的维护工程师个数.职务=部门表.职务
    WHERE (薪水>1000 AND 各部门人数.人数>10) 
    AND ((部门表.部门='开发部' AND 部门表.职务='程序员') OR (部门表.部门='维护部' AND 部门表.职务='维护工程师'))