SQL SELECT语句中列别名在后续表达式中的使用
在SQL中,您可能会遇到希望在同一SELECT语句中的后续表达式中使用列别名的情况。但是,尝试这样做可能会导致类似于问题中描述的错误。
造成此限制的原因是,在评估SELECT语句时,列别名会一起处理。因此,别名在同一SELECT语句中不可用。
解决方案:将查询封装在子查询中
为了解决这个问题,您可以将原始查询封装在子查询中。这将创建一个新的作用域,在该作用域中,列别名可在子查询外部使用。
以下是如何修改查询以在表达式ROUND(avg_time * cnt, 2)中使用列别名avg_time和cnt:
<code class="language-sql">SELECT stddev_time, max_time, avg_time, min_time, cnt, ROUND(avg_time * cnt, 2) as slowdown FROM ( SELECT COALESCE(ROUND(stddev_samp(time), 2), 0) as stddev_time, MAX(time) as max_time, ROUND(AVG(time), 2) as avg_time, MIN(time) as min_time, COUNT(path) as cnt, path FROM loadtime GROUP BY path ORDER BY avg_time DESC LIMIT 10 ) X;</code>
通过将查询封装在子查询中,别名可在外部SELECT语句中使用,从而允许您成功评估表达式ROUND(avg_time * cnt, 2)。
以上是我可以在同一 SQL SELECT 语句中的后续表达式中使用列别名吗?的详细内容。更多信息请关注PHP中文网其他相关文章!