当前位置: 首页 > 面试题库 >

使用联接,分组依据和聚合函数的SQL选择查询

常彭薄
2023-03-14
问题内容

我有两个带有以下字段的表

emp_table: emp_id, emp_name
salary_increase: emp_id, inc_date, inc_amount

我需要编写一个查询,其中提供了雇员的详细信息,雇员获得加薪的次数,最大加薪金额的值以及该加薪的日期。这是我到目前为止所拥有的:

SELECT e.*, count(i.inc_amount), max(i.inc_amount)
FROM salary_increase AS i
RIGHT JOIN emp_table AS e
ON i.emp_id=e.emp_id
GROUP BY e.emp_id;

除了授予最高增加额的日期外,这正确地给出了所有要求。我尝试了以下方法,但均未成功:

SELECT e.*, count(i.inc_amount), max(inc_amount), t.inc_date
FROM salary_increase AS i
RIGHT JOIN emp_table AS e
ON i.emp_id=e.emp_id
RIGHT JOIN
    (
    SELECT emp_id, inc_date FROM salary_increase
    WHERE inc_amount=max(inc_amount) GROUP BY emp_id
    ) AS t
ON e.emp_id=t.emp_id
GROUP BY e.emp_id;

这给出了错误“组功能的无效使用”。有人知道我在做什么错吗?


问题答案:

您不能WHERE inc_amount=max(inc_amount)在where子句中执行此操作,无论是在联接HAVING条件下使用还是在联接条件下执行,请尝试以下操作:

SELECT 
  e.emp_id, 
  e.inc_date,
  t.TotalInc, 
  t.MaxIncAmount
FROM salary_increase AS i
INNER JOIN emp_table AS e ON i.emp_id=e.emp_id
INNER JOIN
(
   SELECT 
     emp_id,
     MAX(inc_amount)     AS MaxIncAmount, 
     COUNT(i.inc_amount) AS TotalInc
   FROM salary_increase
   GROUP BY emp_id
) AS t ON e.emp_id = t.emp_id AND e.inc_amount = t.MaxIncAmount;


 类似资料:
  • 问题内容: 考虑Oracle表。我想用顶薪与获得职工和。还假定没有“ empno”列,并且主键涉及许多列。您可以使用以下方法执行此操作: 这可行,但我必须重复测试deptno = 20和job =’CLERK’,这是我想避免的。有没有更优雅的方式编写此代码,也许使用?顺便说一句,如果这很重要,我正在使用Oracle。 问题答案: 以下内容经过了精心设计,但对于“ top x”查询而言,这是一个很好

  • 问题内容: 上面的查询返回如下结果, 此查询用于计算所有者拥有的传输数量。琳达有一辆汽车和一辆摩托车,所以结果应该是: 我已经尝试过此查询,但返回错误: 谁能帮我吗? 问题答案:

  • 我有3张表<br>Tbcodetable<br> Tbmember TB存款< br > 我想在一个查询中查询每个sato的资本和储蓄的总和 我能做的最好的查询是 这给了我这个结果。 这只给了我资本的总和(我迷失了如何包括储蓄和资本的结果),它不包括那牙地区 。 我可以通过employeeno连接tbmember和tbdeposit,但是我不知道如何在结果集中分离资本和储蓄的总和 编辑< br >

  • 问题内容: 我有两张桌子。表A列出了员工姓名。表B是一个复杂的表,其中包含有关员工打来的电话的信息。 我的目标是制作一个包含“名称”和“ callCount”列的表。我的目标是“左加入”和“分组依据”,但是我一直想念没有打过电话的员工。我怎样才能只保留名称并在其中放置零? 也许我很亲密,有人可以指出我的错字吗?在此先感谢您的帮助,以下是SQL: 问题答案: 这是一个JOIN而非NULL问题:您的过

  • 问题内容: 我在为MySQL编写SQL查询时遇到一些问题。我有一个具有以下结构的表: 我想创建一个查询,该查询从表中提取以下信息: 查询结果应如下所示: 当然,每个唯一的“ id”具有更多行。 我已经尝试过一些查询,例如 这将返回正确的结果,但是我必须使用“ pass”的其他可能值(最多7个)来扩展它 我尝试在AVG中使用嵌套的SELECT,但这没有用,因为我没有弄清楚如何正确地将其限制为当前的’

  • 问题内容: 我有这样的桌子 我想写一个选择查询,这样我就可以得到这样的结果 在这里,我需要按ID和数量总和进行分组,并用相同的ID和Differentnet名称连接字符串名称 问题答案: 这将与sql-server 2008一起使用