2012-03-30 54 views
0

我有以下表(简体):获取个人和总工作小时

user_id date   hours 
1   2012-03-01  5 
2   2012-03-01  8 
3   2012-03-01  6 
1   2012-03-02  3 
3   2012-03-02  7 

我要的是得到的小时和工作对于一个给定的用户ID(例如1。 ),并且无论在单个查询中哪个用户(对于给定的时间段)都工作的总小时数。

所以对于USER_ID = 1,和时间:2012-03-01 - 2012-03-02查询应该返回:自己= 8,总= 29

我可以做两个单独的查询,但不是在一个单独的查询。

回答

5

使用CASE

SELECT SUM(
    CASE user_id 
     WHEN 1 THEN hours 
     ELSE 0 
    END) as Own, 
SUM(hours) as Total 
FROM HoursWorked 
WHERE date BETWEEN '2012-03-01' AND '2012-03-02'; 
+0

U很快@Diego ... :) – Teja 2012-03-30 17:37:39

0

迭戈的回答虽然程序是一个伟大的方式来获得你正在寻找的答案。当然,对于你的日期范围,你需要在'startdate'和'enddate'之间添加一个WHERE日期。这些日期需要采用mysql识别的格式,通常为'yyyy-mm-dd'

另一种解决方案不会让您在一行中得到结果,但在结果集中将执行UNION

SELECT user_id, SUM(hours) as hours FROM table WHERE date BETWEEN 'startdate' AND 'enddate' WHERE user_id = 3 
UNION 
SELECT null as user_id, SUM(hours) as hours FROM table WHERE date BETWEEN 'startdate' AND 'enddate' 
1

我觉得我有一些使用下面的架构的作品:

CREATE TABLE hoursWorked 
    (
    id int, 
    date date, 
    hours int 
    ); 

INSERT INTO hoursWorked 
(id, date, hours) 
VALUES 
('1','2012-03-01','5'), 
('2','2012-03-01','8'), 
('3','2012-03-01','6'), 
('1','2012-03-02','3'), 
('3','2012-03-02','7'); 

而这个查询:

select parent.id, parent.date, parent.hours, (select sum(hours) 
         from hoursWorked child 
         where child.id = parent.id) as totalHours 
from hoursWorked parent 

我能够得到这些结果:

ID DATE       HOURS TOTALHOURS 
1 March, 01 2012 00:00:00-0800 5 8 
2 March, 01 2012 00:00:00-0800 8 8 
3 March, 01 2012 00:00:00-0800 6 13 
1 March, 02 2012 00:00:00-0800 3 8 
3 March, 02 2012 00:00:00-0800 7 13