2013-09-26 265 views
2
总和

假设我想ID,价格和SUM(价格),所以它应该是这样的:获取独特的领域

ID price sum 
-------------------- 
1  10  
1  10  20 
2  20  
2  20  40 
3  30 
3  30  60 

什么是实现这一目标的方法是什么?我真正的查询:

SELECT users.login, projects.name, time_entries.issue_id, time_entries.hours 
FROM users, time_entries 
INNER JOIN projects ON time_entries.project_id = projects.id 
WHERE time_entries.spent_on = CURDATE() - 1 
AND time_entries.user_id = users.id 
ORDER BY users.login; 

显示

+-------+----------------------------------------------------+----------+-------+ 
| login | name            | issue_id | hours | 
+-------+----------------------------------------------------+----------+-------+ 
| ach | name1            | 12624 |  8 | 
| aco | name2            | 11550 |  3 | 
| aco | name2            | 11585 |  3 | 
| alt | name3            | 12644 | 7.5 | 
| ata | name4            | 12761 |  1 | 
| ata | name5            |  NULL |  1 | 
| ata | name6            | 12790 | 0.5 | 
| ata | name7            | 12677 | 5.5 | 
| ato | name8            | 12530 |  8 | 
| elb | name8            | 12697 |  1 | 
| elb | Software management        | 12678 |  7 | 

我想要得到的小时和在独特的登录第五纵队。

+3

的数据,你正在展示与您需要的数据不符(即没有“价格”栏)。另外,你的输出是否需要有空的行?或者,是“它应该看起来像什么”一般,而不是针对你的确切数据? – newfurniturey

回答

0

我相信你在这里寻找的是GROUP BY

SELECT 
    users.login, SUM(time_entries.hours) AS hours 
FROM 
    users 
    JOIN time_entries ON time_entries.user_id = users.id 
WHERE 
    time_entries.spent_on = CURDATE() - 1 
GROUP BY 
    users.login 

这将使类似的输出:

login hours 
-------------- 
ach  42 
alt  13 
ata  27 

如果要包括issue_id列,按您的样本他们可能会有所不同,你可能会对GROUP_CONCAT()感兴趣,它会提供给定用户每个问题的逗号分隔列表:

SELECT 
    users.login, 
    GROUP_CONCAT(issue_id) AS issues, 
    SUM(time_entries.hours) AS hours 
... 
0
SELECT users.login, projects.name, time_entries.issue_id, SUM(time_entries.hours) as hours 
FROM users, time_entries 
INNER JOIN projects ON time_entries.project_id = projects.id 
WHERE time_entries.spent_on = CURDATE() - 1 
AND time_entries.user_id = users.id GROUP BY users.login 
ORDER BY users.login; 
0

newfurniturey,谢谢你的回答,也谢谢别人。 这就是我在寻找最近的:

SELECT users.login, GROUP_CONCAT(projects.name), 
GROUP_CONCAT(time_entries.issue_id), 
GROUP_CONCAT(time_entries.hours), SUM(time_entries.hours) as hours 
FROM users, time_entries 
INNER JOIN projects ON time_entries.project_id = projects.id 
WHERE time_entries.spent_on = CURDATE() - 1 
AND time_entries.user_id = users.id 
GROUP BY users.login ORDER BY users.login; 

    | ata | name1,name2,name3 | 12761,12790,12677 | 1,1,0.5,5.5 | 8 | 

但我想获得下一个结果,如果有可能:

| ata | name1 | 12761 | 1 | | 
| ata | name2 | 12790 | 1 | | 
| ata | name3 | 12677 | 0.5 | | 
| ata | name3 | 12677 | 5.5 | 8 | 

| ata | name1 | 12761 | 1 | 
| ata | name2 | 12790 | 1 | 
| ata | name3 | 12677 | 0.5 | 
| ata | name3 | 12677 | 5.5 | 
| ata |  |  |  | 8 |