Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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/8/.htaccess/6.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 - Fatal编程技术网

如何使用mysql对子查询的总计进行求和

如何使用mysql对子查询的总计进行求和,mysql,Mysql,我有一个现有的查询,它列出了每个员工每天的总小时数。我需要为每位员工计算两个给定日期之间的总小时数。所以基本上我需要总结每个员工的小时数。 以下是我现有的查询,它给出了每天的总数: SELECT CONCAT(pe.first, ' ', pe.last) AS Name, tp.EmpID AS 'Empl ID', DATE_FORMAT(tp.PunchDateTime, '%m-%d-%Y') AS 'Punch Date',

我有一个现有的查询,它列出了每个员工每天的总小时数。我需要为每位员工计算两个给定日期之间的总小时数。所以基本上我需要总结每个员工的小时数。 以下是我现有的查询,它给出了每天的总数:

SELECT CONCAT(pe.first, ' ', pe.last) AS Name,
           tp.EmpID AS 'Empl ID',
           DATE_FORMAT(tp.PunchDateTime, '%m-%d-%Y') AS 'Punch Date',
           TRUNCATE(
              (  SUM(UNIX_TIMESTAMP(PunchDateTime) * (1 - 2 * `In-Out`))
               / 3600),
              2)
              AS 'Hours Worked'
      FROM    timeclock_punchlog tp
           LEFT JOIN
              prempl01 pe
           ON tp.EmpID = pe.prempl
     WHERE     tp.PunchDateTime >= '2013-5-26'
           AND tp.PunchDateTime < '2013-6-1'
    GROUP BY date(PunchDateTime), EmpID
    ORDER BY EmpID ASC
基本上,我想要一个查询,它将获取上面的输出,并显示每个员工的工作时间总和。我不需要显示每天的工作时间

谢谢!
迈克

我当时正在往复杂的方向走。不需要子查询。这是生成所需结果的最终查询

    SELECT CONCAT(pe.first, ' ', pe.last) AS Name,
       tp.EmpID AS 'Empl ID',
       DATE_FORMAT(tp.PunchDateTime, '%m-%d-%Y') AS 'Punch Date',
       TRUNCATE(
          (SUM(UNIX_TIMESTAMP(PunchDateTime) * (1 - 2 * `In-Out`)) / 3600),
          3)
          AS 'Hours Worked'
  FROM timeclock_punchlog tp LEFT JOIN prempl01 pe ON tp.EmpID = pe.prempl
 WHERE tp.PunchDateTime >= '2013-5-1' AND tp.PunchDateTime < '2013-5-28'
GROUP BY tp.EmpID;
选择CONCAT(pe.first',pe.last)作为名称,
tp.EmpID作为“雇员ID”,
日期格式(tp.PunchDateTime,“%m-%d-%Y”)为“打孔日期”,
截断(
(SUM(UNIX_时间戳(PunchDateTime)*(1-2*`In-Out`))/3600),
3)
作为“工作时间”
从timeclock\u punchlog tp LEFT在tp.EmpID=pe.prempl上连接prempl01 pe
其中tp.PunchDateTime>='2013-5-1'和tp.PunchDateTime<'2013-5-28'
tp.EmpID分组;

这应该会有帮助:添加一些sum()并将
weekofyear(punchdatetime)
添加到group by?嗯,日期是任意的。它们可能跨越数周或数天。@CBroe我想您是在暗示“WITH ROLLUP”修饰符。我已经尝试过使用它,但无法让它达到我想要的效果。你应该先按EmpId分组。
    SELECT CONCAT(pe.first, ' ', pe.last) AS Name,
       tp.EmpID AS 'Empl ID',
       DATE_FORMAT(tp.PunchDateTime, '%m-%d-%Y') AS 'Punch Date',
       TRUNCATE(
          (SUM(UNIX_TIMESTAMP(PunchDateTime) * (1 - 2 * `In-Out`)) / 3600),
          3)
          AS 'Hours Worked'
  FROM timeclock_punchlog tp LEFT JOIN prempl01 pe ON tp.EmpID = pe.prempl
 WHERE tp.PunchDateTime >= '2013-5-1' AND tp.PunchDateTime < '2013-5-28'
GROUP BY tp.EmpID;