使用子查询进行SQL查询

使用子查询进行SQL查询,sql,sql-server,Sql,Sql Server,这些是我正在使用的桌子。我想列出超过5名员工工作的所有部门编号和姓名,并计算工资超过40000的员工人数。我想练习使用子查询 以下是我写的: Department (dNumber, dName) Employee (SSN, eName, salary, /dNumber/) Project (pNumber, pName, pLocation) WorksOn (/SSN/, /pNumber/, hours) 但它看起来和感觉都是多余的。我几乎不需要使用子查询。有什么想法吗 谢谢大

这些是我正在使用的桌子。我想列出超过5名员工工作的所有部门编号和姓名,并计算工资超过40000的员工人数。我想练习使用子查询

以下是我写的:

Department (dNumber, dName)

Employee (SSN, eName, salary, /dNumber/)

Project (pNumber, pName, pLocation)

WorksOn (/SSN/, /pNumber/, hours)
但它看起来和感觉都是多余的。我几乎不需要使用子查询。有什么想法吗


谢谢大家!

我认为下面的查询将返回您期望的结果(对于MySql,如果是MSSQL,您需要将
IF
替换为
case
条件):


mysql sql Server您的查询仅返回5名以上员工获得40k+的公司。但根据您的描述,您需要显示拥有5+名员工的公司,并统计那些拥有4万多名员工的公司。哪一个是正确的?@Uril我的英语可能不好,但我感觉你在说同样的话。如果这是一个家庭作业问题:对你可以使用什么有任何限制(特别是:你可以使用“case-when”/“if”)?这不是一回事。如果一个部门有10名员工,他们的收入都是39000美元,您将不会使用当前查询列出该部门,但您的任务似乎希望包括该部门,并提供数据“10名员工,0名员工高于40000”
SELECT T.dNumber, T.dName, COUNT(T.SSN)
FROM 
(
SELECT d.dNumber, d.dName, e.SSN
FROM Department d, Employee e
WHERE e.salary > 40000 AND d.dNumber = e.dNo
) as T
GROUP BY dNumber, dName
HAVING COUNT(T.SSN) > 5;
SELECT T.dNumber, T.dName, COUNT(T.SSN) AS TotalEmployees, sum(IF(T.salary > 4000, 1, 0)) AS EmployeesOverFourty
FROM Department d
INNER JOIN Employee e ON d.dNumber = e.dNo
GROUP BY dNumber, dName
HAVING TotalEmployees > 5;

SELECT
    d1.dNumber,
    d1.dName,
    ISNULL (SUM (CASE WHEN e1.SSN IS NOT NULL THEN 1 ELSE 0 END), 0) AS EmployeeCount
FROM
(
    SELECT
        Department.dNumber,
        Department.dName
    FROM
        Employee
    JOIN
        Department
    ON
        Employee.dNumber = Department.dNumber
    GROUP BY
        Employee.dNumber
    HAVING
        COUNT(*) > 5
) AS d
LEFT JOIN
    Employee e1
ON
    e1.dNumber = d1.dNumber AND
    e1.Salary > 40000
GROUP BY
    d1.dNumber,
    d1.dName