【问题标题】:How to name the column being the day of the week如何将列命名为星期几
【发布时间】:2016-12-17 23:50:34
【问题描述】:

我有这个约会,但我必须输入星期几。

   select `a`.`aplicativo` AS `PROGRAMA`,
          sum((cast(`r`.`created_at` as date) = curdate())) AS `HOJE`,
          sum((cast(`r`.`created_at` as date) = (curdate() - 1))) AS `ONTEM`,
          sum((cast(`r`.`created_at` as date) = (curdate() - 2))) AS `2_DIAS`
   from (`registration` `r` 
         join `aplicativos` `a` on ((`r`.`app_id` = `a`.`id`))) 
   group by `r`.`app_id` 

我已经尝试使用以下命令给出错误。

sum((cast(`r`.`created_at` as date) = (curdate() - 1))) AS DATE_FORMAT(curdate(),'%a %e') 

我希望在 sum 的每一列中都出现

Sunday | Monday | Tuesday | Wednesday
65       54       99        100

它无法修复,因为每一天都会改变。 今天是星期天,将出现星期六、星期五的日期...... 但是明天是星期一,那么它应该出现:星期日,星期六....

明天会有如下结果

Monday | Tuesday | Wednesday | Thursday
54       99        100         85

【问题讨论】:

  • 除非存储过程,否则您不能在查询中直接在列别名上运行函数。还可以考虑使用 PHP、Python 或 R 等应用程序代码来动态创建具有所需列别名的 SQL 语句。
  • 请编辑您的问题并提供示例数据和所需的结果。
  • 嗨,@Gordon Linoff,你能帮我解决这个问题吗?我已经用我需要的结果编辑了我的问题
  • @Parfait,我需要直接在查询中执行此操作,因为我的报告在 Mysql 中很简单,我不使用 php、python 等...
  • @William。 . . SQL 结果集具有一组具有固定名称且顺序固定的列。您只能使用动态 SQL 做您想做的事。

标签: mysql sql mariadb


【解决方案1】:
SELECT a.aplicativo AS programa,
  SUM(CASE WHEN dayofweek(r.created_at)=1 THEN 1 ELSE 0 END) AS sunday,
  SUM(CASE WHEN dayofweek(r.created_at)=2 THEN 1 ELSE 0 END) AS monday,
  /* ... */
  SUM(CASE WHEN dayofweek(r.created_at)=7 THEN 1 ELSE 0 END) AS saturday
FROM registration r
  JOIN aplicativos a ON a.id=r.app_id
WHERE r.created_at>=(curdate()-6)
GROUP BY a.aplicativo

【讨论】:

  • 这样它就可以求和一周中的某一天示例:在周日的情况下,求和一周中的所有时间。那不是我需要的!我需要它来显示今天星期天的所有下载和列的名称 = 星期天。明天是星期一,因此该列应更改为星期一
  • 查看 WHERE 子句:查询不会汇总所有星期日、所有星期一等的数据。它仅汇总今天和前 6 天的数据。所以这正是你需要的,除了列的顺序是固定的。
  • 再次强调,@William,SQL 是一种特殊用途的声明性语言,其中结构组件(如表/列)一旦被引用,尽管数据可以更改,但它是不可变的。您需要每天重新创建此查询。重新考虑通用语言,如前面提到的 Python、PHP、R,每种语言都有很好的 MySQL API。
  • 唯一的另一种方法是动态地构建您的查询,正如 Gordon Linoff 已经说过的那样。
  • 谢谢你们,我会固定列的名称。
猜你喜欢
  • 1970-01-01
  • 2021-09-29
  • 2020-12-14
  • 2019-05-18
  • 2021-07-10
  • 2018-08-09
  • 2011-01-29
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多