【问题标题】:Output alias in MySQL SELECT queryMySQL SELECT 查询中的输出别名
【发布时间】:2011-08-18 09:58:52
【问题描述】:

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

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

这很好用,但我真的想用 hours_ 替换 'SUM(alloc.hours)'...

我尝试了以下方法,但它会抛出错误

SELECT SUM(alloc.hours) AS CONCAT('hours_',alloc.day), alloc.day

表架构: grwp_allocations:

  • 身份证
  • job_id
  • user_id
  • 小时

grwp_jobs:

  • 身份证

请记住,我希望数据在末尾可用:

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

谢谢。

【问题讨论】:

  • 我想你需要一个准备好的声明。
  • PS 有什么帮助?我正在为系统中的每个用户动态运行查询。

标签: mysql debugging database-design


【解决方案1】:

这没有多大意义。

EITHER想要一个hours_per_day 列,它将生成如下数据:

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

这显然是一个简单的解决方法,只需重命名查询中的 SUM 列:

SELECT SUM(alloc.hours) AS hours_per_day`

您希望一周中的每一天都有一个列 (hours_mon,hours_tue...),这将需要一个完全不同的查询 - 不仅仅是不同的列名! 这种情况称为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

【讨论】:

  • 谢谢,IF语句部分很好。这并不理想,但它可以在我不必为了我的命名约定而重新创建结构的情况下工作。
猜你喜欢
  • 1970-01-01
  • 2013-05-30
  • 2019-03-09
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2012-01-14
相关资源
最近更新 更多