mysql中2列的月和年订单
员工表如下所示mysql中2列的月和年订单,mysql,sql,date,Mysql,Sql,Date,员工表如下所示 Name DOJ DOL ............ ............... ............ Ram 2014-01-12 2014-02-12 Kiran 2014-02-05 2014-07-05 Jhon 2014-01-25 2014-10-01
Name DOJ DOL
............ ............... ............
Ram 2014-01-12 2014-02-12
Kiran 2014-02-05 2014-07-05
Jhon 2014-01-25 2014-10-01
预期产出是
Month Joining_count Leaving_count
........... ................ .................
Jan-2014 2 0
Feb-2014 1 1
. . .
. . .
. . .
我尝试了以下Mysql查询,但无法获得预期的输出
请帮帮我
SELECT monthname(current_date) as month,
count( `DATE_OF_JOINING`) as 'Joining_count' ,
count( `DATE_OF_LEAVING`) as 'leaving_count' ,
group by year(`DATE_OF_JOINING`),month('DATE_OF_JOINING`),
year(`DATE_OF_LEAVING),month(`DATE_OF_LEAVING)
您正在对同一数据执行两个不同的聚合-因此需要两个聚合查询
join
ed。
不幸的是,没有一个完整的外部连接,所以处理有人离开但没有人加入的月份和有人加入但没有人离开的月份都有点麻烦。我通过三个连接解决了这个问题——一个查询获取所有可能的日期,另外两个查询用于每个聚合
基本上,您需要两个查询,一个用于分组加入日期,另一个用于离开日期。您可以使用
UNION ALL
组合这两个结果,并将组合结果视为一个新表,然后选择(和SUM
)值
SELECT
s.month,
SUM(s.Joining_count) AS Joining_count,
SUM(s.Leaving_count) AS Leaving_count
FROM
(
SELECT
DATE_FORMAT(doj, '%b-%y') as `month`,
COUNT(ej.doj) as 'Joining_count',
0 AS 'Leaving_count'
FROM employee ej
GROUP BY `month`
UNION ALL
SELECT
DATE_FORMAT(dol, '%b-%y') as `month`,
0 as 'Joining_count',
COUNT(el.dol) as 'Leaving_count'
FROM employee el
GROUP BY `month`
) s
GROUP BY s.`month`;
输出将是
month Joining_count Leaving_count
---------------------------------------------
Feb-2014 1 1
Jan-2014 2 0
Jul-2014 0 1
Oct-2014 0 1
month Joining_count Leaving_count
---------------------------------------------
Feb-2014 1 1
Jan-2014 2 0
Jul-2014 0 1
Oct-2014 0 1