MYSQL中的列分组,复杂查询

MYSQL中的列分组,复杂查询,mysql,sql,database,Mysql,Sql,Database,我有一个MYSQL查询,我需要将这些列彼此相邻地分组,但我似乎无法做到这一点 SELECT Supervisor, (CASE WHEN DAYOFWEEK(workdate) = 2 THEN (COUNT(`ID Number`)) END) AS `Monday`, (CASE WHEN DAYOFWEEK(workdate) = 3 THEN (COUNT(`ID Number`)) END) AS `Tuesday`, (CASE WHEN DAYOFWEEK(wor

我有一个MYSQL查询,我需要将这些列彼此相邻地分组,但我似乎无法做到这一点

SELECT Supervisor,
   (CASE WHEN DAYOFWEEK(workdate) = 2 THEN (COUNT(`ID Number`)) END) AS `Monday`,
   (CASE WHEN DAYOFWEEK(workdate) = 3 THEN (COUNT(`ID Number`)) END) AS `Tuesday`,
   (CASE WHEN DAYOFWEEK(workdate) = 4 THEN (COUNT(`ID Number`)) END) AS `Wednesday`,
   (CASE WHEN DAYOFWEEK(workdate) = 5 THEN (COUNT(`ID Number`)) END) AS `Thursday`,
   (CASE WHEN DAYOFWEEK(workdate) = 6 THEN (COUNT(`ID Number`)) END) AS `Friday`,
   (CASE WHEN DAYOFWEEK(workdate) = 7 THEN (COUNT(`ID Number`)) END) AS `Saturday`
FROM payroll.employeedatanew_copy
INNER JOIN payroll.employeehours ON employeedatanew_copy.`ID Number` = employeehours.employeeid
WHERE workdate BETWEEN "2013-10-28" AND "2013-11-02"
GROUP BY workdate, supervisor
以下是我的结果:

这就是我想要的:

我想你在找这个:

SELECT Supervisor,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 2 THEN 1 END) `Monday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 3 THEN 1 END) `Tuesday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 4 THEN 1 END) `Wednesday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 5 THEN 1 END) `Thursday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 6 THEN 1 END) `Friday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 7 THEN 1 END) `Saturday`
FROM payroll.employeedatanew_copy
JOIN payroll.employeehours ON employeedatanew_copy.`ID Number` = employeehours.employeeid
WHERE workdate BETWEEN "2013-10-28" AND "2013-11-02"
GROUP BY supervisor
或者,
计数
s可以替换为:

SUM(DAYOFWEEK(workdate) = 2) `Monday`

这是基于MySQL中
true
等于
1
这一事实而起作用的,但不一定在其他DBMS中起作用。

我想您正在寻找这个:

SELECT Supervisor,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 2 THEN 1 END) `Monday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 3 THEN 1 END) `Tuesday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 4 THEN 1 END) `Wednesday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 5 THEN 1 END) `Thursday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 6 THEN 1 END) `Friday`,
   COUNT(CASE WHEN DAYOFWEEK(workdate) = 7 THEN 1 END) `Saturday`
FROM payroll.employeedatanew_copy
JOIN payroll.employeehours ON employeedatanew_copy.`ID Number` = employeehours.employeeid
WHERE workdate BETWEEN "2013-10-28" AND "2013-11-02"
GROUP BY supervisor
或者,
计数
s可以替换为:

SUM(DAYOFWEEK(workdate) = 2) `Monday`

这是基于这样一个事实:MySQL中的
true
等于
1
,但不一定在其他DBMS中工作。

在“我想要什么”图像中,每一行的值对于每个工作日都是相同的,这是预期的吗?请从
group by
@MikeBrant中删除
组中的
workdate
字段,是的,我刚刚为每个日期使用了相同的数据集,所以值是相同的:)。谢谢Barranka,但这还不够,下面是完美的答案!在“我想要什么”图像中,每一行的值对于每个工作日都是相同的,这是预期的吗?从
分组中删除
workdate
字段by
@MikeBrant,是的,我刚刚对每个日期使用了相同的数据集,所以值是相同的:)。谢谢Barranka,但这还不够,下面是完美的答案!需要注意的是,按
workdate
分组基本上是先将所有workdate=2行放在前面,然后再将workdate=3行,以此类推。您根本不希望进行分组。这就是为什么Darrent Bent不止一次出现在不同的一排。非常感谢你们,非常感谢你们的帮助!需要注意的是,按
workdate
分组基本上是先将所有workdate=2行放在前面,然后再将workdate=3行,以此类推。您根本不希望进行分组。这就是为什么Darrent Bent不止一次出现在不同的一排。非常感谢你们,非常感谢你们的帮助!