我正在尝试创建一个查询。该查询是工作计划系统的一部分,用于查找每个系统的每个用户每天分配多少小时,除了当前正在查看的作业之外的所有作业。
我希望输出具有很好的名称别名,例如hours_mon,hours_tue等。
目前查询如下:
SELECT SUM(alloc.hours), alloc.day
FROM grwp_allocations AS alloc
LEFT JOIN grwp_jobs AS job ON (job.id = alloc.job_id AND job.id != '3')
WHERE alloc.user_id = '35'
AND alloc.deleted = '0'
AND alloc.acknowledged = '0'
GROUP BY alloc.day
哪个工作正常,但我真的想用'_(。
)替换'SUM(alloc.hours)'。我已经尝试了以下但是它会抛出错误
SELECT SUM(alloc.hours) AS CONCAT('hours_',alloc.day), alloc.day
表架构: grwp_allocations:
grwp_jobs:
请记住,我希望数据在最后可用:
hours_mon,hours_tue,hours_wed等..其中'mon','tue','wed'等是DAY字段中的值,别名的值是(summed)小时。
谢谢。
答案 0 :(得分:3)
这没有多大意义。
您是想要一个hours_per_day
列,它会生成以下数据:
hours_per_day | day
---------------+-------
10 | mon
9 | tue
这显然是一个简单的修复,只需在查询中重命名SUM列:
SELECT SUM(alloc.hours) AS hours_per_day`
或
您想要一周中每天的列(hours_mon
,hours_tue
...),这需要完全不同的查询 - 不仅仅是不同的列名!这case被称为PIVOT表,如下所示:
user | mon | tue | wed
-----+-----+-----+----
35 | 10 | 9 | 0
有关如何在MySQL中实现此目的的说明,请转至:http://www.artfulsoftware.com/infotree/queries.php?&bw=1339#78
他们展示的选项之一将是:
SELECT alloc.user_id AS user,
SUM(IF(alloc.day = 'mon',alloc.hours,0)) as mon,
SUM(IF(alloc.day = 'tue',alloc.hours,0)) as tue,
SUM(IF(alloc.day = 'wed',alloc.hours,0)) as wed,
SUM(IF(alloc.day = 'thu',alloc.hours,0)) as thu,
SUM(IF(alloc.day = 'fri',alloc.hours,0)) as fri
FROM grwp_allocations AS alloc
LEFT JOIN grwp_jobs AS job ON (job.id = alloc.job_id AND job.id != '3')
WHERE alloc.user_id = '35'
AND alloc.deleted = '0'
AND alloc.acknowledged = '0'
GROUP BY alloc.user_id