Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
sql新手,有人能带我完成这个查询吗_Sql_Sql Server - Fatal编程技术网

sql新手,有人能带我完成这个查询吗

sql新手,有人能带我完成这个查询吗,sql,sql-server,Sql,Sql Server,我有作业要写下面的查询:“写一个SQL查询来打印每个部门工资最高的员工的姓名”。我的理解能力还不足以编写这个查询。我找到了老师抄袭作业和答案的地方,但不幸的是,我没有完全理解错在哪里。如果有人能告诉我这个问题背后的逻辑,我将不胜感激: 基本上:这个例子只适用于没有两个人拥有相同的最高工资的情况。只要这是真的: 让我们从最里面的子查询开始: SELECT max(Salary) as TotalSalary,DEPARTMENT from Worker group by DEPARTMENT

我有作业要写下面的查询:“写一个SQL查询来打印每个部门工资最高的员工的姓名”。我的理解能力还不足以编写这个查询。我找到了老师抄袭作业和答案的地方,但不幸的是,我没有完全理解错在哪里。如果有人能告诉我这个问题背后的逻辑,我将不胜感激:


基本上:这个例子只适用于没有两个人拥有相同的最高工资的情况。只要这是真的:

让我们从最里面的子查询开始:

SELECT max(Salary) as TotalSalary,DEPARTMENT 
from Worker
group by DEPARTMENT
这基本上从Worker表中获取所有数据,并为每个部门选择最高工资。结果是一个表,每个非空部门有一行,其中有部门名称和最高工资

对于查询的其余部分,此中介结果为带有TempNew的别名

下一部分是连接:

Inner Join Worker t on TempNew.DEPARTMENT=t.DEPARTMENT and TempNew.TotalSalary=t.Salary
因此,我们现在将中间结果与原始Worker表连接起来,在这个查询中,它现在的别名是t。我们加入部门,总工资=t.Salary

这意味着:对于TempNew中的每一行,我们获取具有相同部门且其中Salary是TotalSalary的所有行。假设我们没有任何重复的工资,这将为每一行TempNew从t返回正好一行

最后,选择:

SELECT t.DEPARTMENT,t.FIRST_NAME,t.Salary 
因此,从上面的合并数据中,我们现在选择别名t的DEPARTMENT、FIRST_NAME和Salary列(它是由TempNew“过滤”的原始Worker表)


希望有帮助;)

最好的学习方法是通过实践。如果您还没有一些虚假数据,请创建一些虚假数据,并开始对其执行查询。归还什么?有错误吗?观察结果,根据您的发现调整查询,然后重试。这就是你如何成为一名开发人员的过程,无论遇到什么样的问题,都有可能从每一次经验中学习。要扩展Igor的评论,最好的开始方法是将问题分成小块(这仍然是我工作的一大部分),一旦你知道了较小的问题,编程就变得简单了。你想知道什么?“每个部门的最高工资”,所以写一个查询来计算。其次,“谁挣的薪水最高”。将计算出的最高工资加入表格很容易(因为他们可能只挣一份工资,至少每个部门)@HoneyBadger你能不能帮我指出正确的方向最让人困惑的是t.column_name来自何处我必须研究一下。非常感谢你我没有意识到你可以通过别名来选择某个东西,如果你只是在稍后的查询中将其声明为别名的话。我对别名的理解显然需要努力,但我们从未在课堂上讨论过,所以我必须去做一些研究。
SELECT t.DEPARTMENT,t.FIRST_NAME,t.Salary