mysql - MYSQL中的分组列,复杂查询

标签 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(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

这是我的结果: http://i.stack.imgur.com/l9kSz.png

这就是我想要的: http://i.stack.imgur.com/bRNmJ.png

最佳答案

我猜你正在寻找这个:

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

或者,count 可以替换为:

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

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

关于mysql - MYSQL中的分组列,复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340476/

相关文章:

c# - 如何在对模型进行更改后更新数据库快照以匹配数据库

php - Mysql,其中名称在数组中

java - JDBC 中的正则表达式

php - 向重复行添加/分配数字

SQL SELECT string 大于使用 count()

python - 如何在发布后更新数据库驱动的应用程序?

php - 如何在 MySQL 和 PHP 中找到相同的表?

php - 查询适用于 mysql,但不适用于 php sql 调用

mysql - 在内部连接Mysql中找到最近的时间

c# - 检查列名是否已存在于 Access/oledb 中