我目前有一个相当混乱的查询,它从多个涉及两个子查询的表中连接数据。我现在要求将这些数据按DAY()
,WEEK()
,MONTH()
和QUARTER()
分组。通过多个连接的日期范围进行MySQL分组
我有三个表格:days
,qos
和employees
。一个employee
是不言自明的,day
是一个员工在给定的一天的表现,qos
是一个随机的质量检查,可以每天执行很多次。
目前,我选择所有employees
和LEFT JOIN
ing day
和qos
,这很好。但是,现在,我需要对数据进行分组,以便在某个日期范围内细分团队或个人的表现。
以这样的数据:
雇员
id | name
------------------
1 | Bob Smith
日
id | employee_id | day_date | calls_taken
---------------------------------------------
1 | 1 | 2011-03-01 | 41
2 | 1 | 2011-03-02 | 24
3 | 1 | 2011-04-01 | 35
的Qos
id | employee_id | qos_date | score
----------------------------------------
1 | 1 | 2011-03-03 | 85
2 | 1 | 2011-03-03 | 95
3 | 1 | 2011-04-01 | 91
如果我是通过分组通过DAY()
开始,我需要看到以下结果:
Day__date | Day__Employee__id | Day__calls | Day__qos_score
------------------------------------------------------------
2011-03-01 | 1 | 41 | NULL
2011-03-02 | 1 | 24 | NULL
2011-03-03 | 1 | NULL | 90
2011-04-01 | 1 | 35 | 91
正如你看到的,Day__calls
应该SUM(calls_taken)
和Day__qos_score
是AVG(score)
。我尝试过使用与上面类似的方法,但由于直到其中一个表已加入时才知道日期,因此只会显示保存有day
的记录。
有没有办法做到这一点,或者我会以错误的方式处理事情?
编辑:按照要求,这是我到目前为止所提出的。但是,它只显示有day
的日期。
SELECT COALESCE(`day`.day_date, qos.qos_date) AS Day__date,
employee.id AS Day__Employee__id,
`day`.calls_taken AS Day__Day__calls,
qos.score AS Day__Qos__score
FROM faults_employees `employee`
LEFT JOIN (SELECT `day`.employee_id AS employee_id,
SUM(`day`.calls_taken) AS `calls_in`,
FROM faults_days AS `day`
WHERE employee.id = 7
GROUP BY (`day`.day_date)
) AS `day`
ON `day`.employee_id = `employee`.id
LEFT JOIN (SELECT `qos`.employee_id AS employee_id,
AVG(qos.score) AS `score`
FROM faults_qos qos
WHERE employee.id = 7
GROUP BY (qos.qos_date)
) AS `qos`
ON `qos`.employee_id = `employee`.id AND `qos`.qos_date = `day`.day_date
WHERE employee.id = 7
GROUP BY Day__date
ORDER BY `day`.day_date ASC
你能发表您的查询吗? –
@Christian我已经添加了我目前的查询 –