【问题标题】:subqueries AVG of the SUM resultSUM 结果的子查询 AVG
【发布时间】:2015-04-20 19:07:57
【问题描述】:

我的子查询有问题。 所以我想列出总工作时间大于所有员工平均总工作时间的员工。 但是使用此代码,它会将一名员工的工作时间与另一名员工每小时的工作时间进行比较。 所以这是总结: 员工总工作时间 > 所有员工总工作时间的平均值 --> WHERE hrs_worked > AVG(SUM(HRS_WORKED)) 这就是我想要的。

SELECT employee.emp_id,
       employee.emp_name,
       SUM(action.hrs_worked) AS "Total Hours Worked"
FROM action
INNER JOIN allocation ON action.act_id = allocation.act_id
AND action.emp_id = allocation.emp_id
INNER JOIN employee ON allocation.emp_id = employee.emp_id
WHERE action.hrs_worked >
    (SELECT AVG(action.hrs_worked)
     FROM action)
GROUP BY employee.emp_id,
         employee.emp_name
ORDER BY SUM(action.hrs_worked) DESC

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。

标签: mysql sql subquery isql


【解决方案1】:

应该是这样的:

SELECT * 
FROM  Orders
........... 
WHERE Price > (
           SELECT AVG(sum_pr) 
           FROM (
              SELECT SUM(Price) as sum_pr 
              FROM Orders 
              GROUP BY Price
                 )x
               )

【讨论】:

    【解决方案2】:

    让我们把员工姓名排除在外。总工时为:

    SELECT a.emp_id, SUM(a.hrs_worked) AS TotalHoursWorked
    FROM action a 
    GROUP by a.emp_id;
    

    要获得大于平均值的值:

    SELECT a.emp_id, SUM(a.hrs_worked) AS TotalHoursWorked
    FROM action a 
    GROUP by a.emp_id;
    HAVING TotalHoursWorked > (SELECT avg(TotalHoursWorked)
                               FROM (SELECT a.emp_id, SUM(a.hrs_worked) AS TotalHoursWorked
                                     FROM action a 
                                     GROUP by a.emp_id
                                    ) a2
                               );
    

    您可以使用join 来引入您想要的其余字段。

    根据您的查询,我看不出allocation 的使用情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 2020-10-05
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多