MySQL SELECT查询中的输出别名

时间:2011-05-04 10:11:47

标签: mysql debugging database-design

我正在尝试创建一个查询。该查询是工作计划系统的一部分,用于查找每个系统的每个用户每天分配多少小时,除了当前正在查看的作业之外的所有作业。

我希望输出具有很好的名称别名,例如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:

  • ID
  • JOB_ID
  • USER_ID
  • 小时

grwp_jobs:

  • ID

请记住,我希望数据在最后可用:

hours_mon,hours_tue,hours_wed等..其中'mon','tue','wed'等是DAY字段中的值,别名的值是(summed)小时。

谢谢。

1 个答案:

答案 0 :(得分:3)

这没有多大意义。

想要一个hours_per_day列,它会生成以下数据:

hours_per_day  |  day
---------------+-------
10             |  mon
9              |  tue

这显然是一个简单的修复,只需在查询中重命名SUM列:

SELECT SUM(alloc.hours) AS hours_per_day`

您想要一周中每天的列(hours_monhours_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