Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何解决这两个问题?_Mysql_Sql_Sql Server_Sqlite_Tsql - Fatal编程技术网

Mysql 如何解决这两个问题?

Mysql 如何解决这两个问题?,mysql,sql,sql-server,sqlite,tsql,Mysql,Sql,Sql Server,Sqlite,Tsql,我是SQL新手,我有一个家庭作业。我做了所有的问题,但仍然无法解决这两个问题,所以请帮助,如果你可以。我提前感谢你 我有四张桌子: EMPLOYEE which conatin the attributes (Fname, Minit, Lname, Ssn, Bdate, Address, Sex, Salary, Super_ssn, Dno) Table DEPARTMENT have the columns ( Dname, Dnumber, Mgr_ssn, Mgr_start_da

我是SQL新手,我有一个家庭作业。我做了所有的问题,但仍然无法解决这两个问题,所以请帮助,如果你可以。我提前感谢你

我有四张桌子:

EMPLOYEE which conatin the attributes (Fname, Minit, Lname, Ssn, Bdate, Address, Sex, Salary, Super_ssn, Dno)

Table DEPARTMENT have the columns ( Dname, Dnumber, Mgr_ssn, Mgr_start_date)

Table PROJECT have the columns ( Pname, Pnumber, Plocation, Dnum)

Table DEPENDENT (Essn, Dependent_name, Sex, Bdate, Relationship)
问题1。对于控制项目数量最多的部门,请列出其名称? 我提出了这个问题,但它只是告诉我每个部门它控制了多少个项目,但无法让它工作,因为它只给了我一个最多的项目:(

Q2.检索受抚养人比任何其他员工多的员工的姓名和Ssn

我想出了这个,但我不知道为什么它不起作用。我不断地得到一个错误

SELECT Fname, Lname, Ssn
FROM Employee
WHERE max((SELECT COUNT(*)
        FROM Dependent
        WHERE Ssn = Essn));

顺便说一句,我使用的是MySql WorkBench 5.2,该语言仅允许在第一次查询中使用SQL,如果您已经有一个包含所有部门及其控制的项目数量的列表,那么您已经完成了工作。在查询中添加一点额外的代码以完成该工作

如果按项目数量降序排序,则正确的部门将位于列表的第一位。如果限制为1,则仅选择该部门


您的第二个查询需要更多的工作,它提供的信息不如第一个查询干净。请再次执行相同的操作,首先按顺序获取信息,然后查找顶部的信息。您的内部查询可能如下所示:

(SELECT Essn, COUNT(Dependent_name) AS Dependents
 FROM Dependent
 GROUP BY Essn
 ORDER BY Dependents DESC);

您可以对Q1使用此查询:

    SELECT * FROM(
    SELECT Dname, COUNT(distinct Pnumber) as NumberOfProjects
    FROM Department, Project
    WHERE Dnum = Dnumber
    GROUP BY Dname
ORDER BY COUNT(distinct Pnumber) desc nulls last)
LIMIT 1

您可以将此查询用于第2季度:

SELECT Fname, Lname, Essn FROM(
    SELECT Essn,  Fname, Lname, COUNT(Dependent_name) as NumberOfDependents
    FROM Dependent, Employee
    WHERE Essn = Ssn
    GROUP BY Essn
ORDER BY NumberOfDependents desc)
LIMIT 1

如果您使用上述子查询运行它,则效率低下,因为在提取具有最大依赖项的员工之前,您要连接两个大型表Dependent和Employee。但它会工作!

@Rahul Tripathi非常感谢您的编辑:)您使用三个不同的DBMS系统标记了您的问题。您使用的是哪一个?子查询不是低效的,它们就像查询上的投影,您可以通过查看子查询上的执行计划来检查这一点
SELECT Fname, Lname, Essn FROM(
    SELECT Essn,  Fname, Lname, COUNT(Dependent_name) as NumberOfDependents
    FROM Dependent, Employee
    WHERE Essn = Ssn
    GROUP BY Essn
ORDER BY NumberOfDependents desc)
LIMIT 1