mysql - 在mysql中使用内部连接在同一个表中添加不同的列

标签 mysql

我想对特定项目的时间条目进行报告。我尝试了以下查询。

表 1:项目

id   | Name
------------
1    |  A
2    |  B

表2:EmployeeTimeEntry

proj | activity  |time
----------------------
1    | coding    | 5
2    | coding    | 2
1    | testing   | 2
1    | coding    | 2

我想要的项目 A 输出:

proj  | TotalDur  | activity | Activitytime
--------------------------------------------
A     |  9        | coding   |  7
A     |  9        | testing  |  2

我的查询:

$query = "SELECT        
    name  as 'Proj',        
    TimeEntry.Total as 'TotalDur',
    ATimeEntry.ADetails as 'activity',
    ATimeEntry.ATotal as 'Activitytime'             
    FROM Projects pr

    INNER JOIN(SELECT project,SUM(time) as Total from EmployeeTimeEntry group by project ) TimeEntry on pr.id = TimeEntry.project
    INNER JOIN(SELECT project,details as ADetails,SUM(time) as ATotal from EmployeeTimeEntry where id = pr.id group by details ) ATimeEntry on pr.id = TimeEntry.project";

但是我得到的输出是

proj  | TotalDur  | activity | Activitytime
--------------------------------------------
A     |  9        | coding   |  9
A     |  9        | testing  |  2

添加所有项目的所有事件时间。 我使用组合来选择要显示报告的项目。

最佳答案

我觉得你把它复杂化了

select
p.name as Proj,
x.TotalDur,
et.activity,
sum(et.time) as Activitytime
from Projects p
join (
   select proj, sum(time) as TotalDur from EmployeeTimeEntry group by proj
)x on x.proj = p.id
join EmployeeTimeEntry et on et.proj = p.id
where p.name = 'A'
group by p.name,et.activity

DEMO

关于mysql - 在mysql中使用内部连接在同一个表中添加不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28105937/

相关文章:

Mysql::Error: 不正确的字符串值: '\xE9ditos...' with rails

PHP模型(MySQL)设计问题

mysql - 插入后触发更新另一表中的一条记录

java - 将 Spring JDBC 创建的模式设置为默认模式

mysql - 从 postgres 上的多个表聚合不起作用

mysql - 2条记录时间戳sql之间的差异

mysql - 从表中选择除同一表中的某些记录之外的所有记录

mysql - 在 mysql 中收到 "data truncated for column"警告

MySQL 2 个表 UNION

php - mysql 受 View 限制但按字母顺序排列?