【发布时间】:2020-09-21 19:00:52
【问题描述】:
我正在学习 SQL。我有一种情况,我必须使用我在运行时创建的同一列。该表是 患者,只有 2 列,分别是 dateOfCheckup 和 duration 以分钟为单位。
+---------------+-----------------+
| dateOfCheckup | duration |
+---------------+-----------------+
| 2020-05-28 | 30 min |
| 2020-05-29 | 30 min |
| 2020-05-30 | 1 hour |
| 2020-06-03 | 1 hour 30 min |
| 2020-06-05 | 30 min |
| 2020-07-21 | 1 hour |
| 2020-07-22 | 1 hour 30 min |
| 2020-07-28 | 1 hour 30 min |
+---------------+-----------------+
现在我将在运行时再创建 1 列,即 minutes(只是将 duration 转换为整数值的总分钟数):
select dateOfCheckup, duration,
((case when duration like '% hour%' then substring_index(duration, ' hour', 1) * 60 else 0 end) + (case when duration like '%min%' then substring_index(substring_index(duration, ' min', 1), ' ', -1) + 0 else 0 end)) as minutes from patient;
此查询运行良好。查看结果:
+---------------+-----------------+-----------------+
| dateOfCheckup | duration | minutes |
+---------------+-----------------+-----------------+
| 2020-05-28 | 30 min | 30 |
| 2020-05-29 | 30 min | 30 |
| 2020-05-30 | 1 hour | 60 |
| 2020-06-03 | 1 hour 30 min | 90 |
| 2020-06-05 | 30 min | 30 |
| 2020-07-21 | 1 hour | 60 |
| 2020-07-22 | 1 hour 30 min | 90 |
| 2020-07-28 | 1 hour 30 min | 90 |
+---------------+-----------------+-----------------+
我的问题是,如果我想在同一个查询中使用这个新创建的列 minutes 来处理其他任务,例如 group by、order by、sum、avg 等。我只是询问是否有这样的场景,那么我们如何实现这一点。我尝试使用sum(minutes)。错误是:
“字段列表”中的未知列“分钟”
这是db<>fiddle。请帮帮我。
【问题讨论】:
-
你希望输出是什么?
-
例如,在另一列中设为分钟+10。
-
提供了下面的解决方案,如果对你有用的话