基于
Amazon Redshift宣布支持横向列别名参考:
对横向列别名引用的支持使您能够编写查询,而不必在SELECT列表中重复相同的表达式。例如,您可以定义别名“概率”,并在同一select语句中使用它:
select clicks / impressions as probability, round(100 * probability, 1) as percentage from raw_data;
基本上与以下内容相同:
select 1 AS col
,col + 1 AS col2;
db <>
fiddle演示
大多数SQL RDBMS都将返回错误: Unknown column 'col' in 'field list'
它看起来像是有趣的语言扩展,但有一个警告。如果我的功能不确定,该怎么办:
select RAND() AS col
,col + 1 AS col2
-- if RAND() returns 0.5 then I would expect
-- 0.5 and 1.5
-- I get: 0.3 and 1.7
-- it means that the query was evaluated as:
select RAND() AS col,
RAND() + 1 AS col2
与LATERAL JOIN
来自PostgreSQL的比较(是的,我知道这是不同的功能,我希望“侧面库伦别名”的行为相同):
SELECT s.col, s.col+1 AS col2
FROM t ,LATERAL (SELECT RANDOM()) AS s(col)
-- 0.19089933477628307 1.190899334776283
db <>fiddle演示
但事实并非如此。我得到了两次独立运行,如果简单地进行“内联”,这似乎是有效的:
选择清单
别名在目标列表中定义后立即被识别。您可以在同一目标列表中在别名之后定义的其他表达式中使用别名。以下示例说明了这一点。
横向别名引用的好处是,在同一目标列表中构建更复杂的表达式时,无需重复使用别名表达式。当Amazon Redshift解析这种类型的引用时,
它仅内联先前定义的别名。 如果在FROM子句中定义的名称与以前的别名表达式相同,则FROM子句中的列具有优先权。
我的理解正确吗?当我们使用不确定性或时间敏感的功能/引用/子查询时,此功能不是“安全的”吗?
此语法不安全。实际上,仅内联代码意味着它甚至没有提供性能优势。它只是语法糖。
考虑到CTE和子查询是很容易的选择,我只是避免使用这种新的“功能”。
如果有关闭此功能的设置,我建议您使用它。
顺便说一下,SQL的许多新手发现这很令人不安。目的是避免歧义。以下查询应返回什么?
select (a + 1) as b, b
from (select 1 as a, 0 as b) x;
SQL的设计者可能认为解决这种情况的规则比仅重写子查询要复杂得多。
我知道可以很好地解决这一问题的一个“数据库”实际上是SAS proc SQL
。它引入了calculated
关键字,因此您可以编写:
select (a + 1) as b, calculated b, b
from (select 1 as a, 0 as b) x;
这将返回2, 2, 0
。
换句话说,我认为亚马逊并没有为实现这一“功能”投入太多心思。
问题内容: 我试图对我的应用程序强制使用“横向”模式,因为我的应用程序绝对不是针对“人像”模式设计的。我怎样才能做到这一点? 问题答案: 现在可以使用HTML5 Webapp清单。 见下文。 原始答案: 您不能将网站或Web应用程序锁定在特定方向。它违反了设备的自然行为。 您可以使用CSS3媒体查询来 检测 设备方向,如下所示: 或通过绑定JavaScript方向更改事件,如下所示: 2014年1
我正在关注w3c学校关于制作幻灯片网页的教程。 对我来说,唯一不同的要求是,我有相同垂直分辨率的横向和纵向图像(1280x720和420x720)。 当我加载肖像图像时,它们的比例会大得多,因为图像仅受最大宽度的限制。实际上,我希望边界是垂直最大高度,所以当我循环通过它们时,高度是恒定的。 问题是,当我在上指定“最大高度”并删除“最大宽度”时。幻灯片容器,然后将图像左对齐放置在页面上。所以看起来我
setPrintedLandscape(): self 实例 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); $excel->fileName('printed_landscape.xlsx', 'sheet1') ->setPrintedLandscape() // 设置打印
问题内容: 我有一个HTML报告,由于列很多,因此需要横向打印。是否有一种方法可以执行此操作,而无需用户更改文档设置? 在浏览器中有哪些选择。 问题答案: 在CSS中,您可以设置@page属性,如下所示。 @page是CSS 2.1规范的一部分,但是问题的答案并未突出显示@page{size:landscape}是否已过时?: CSS 2.1不再指定size属性。CSS3 Paged Media模
在纵向滚动的UITableView的每一个section里面嵌套横向滚动的UITableView。其中横向滑动的UITableView,是重新建了一个类来重写UITableView,将其旋转90°。适用环境:Xcode 4.5, iOS 5.0 以上。 [Code4App.com]
问题内容: 我正在创建一个使用两次来自同一表的数据的视图。结果,相同的列名出现两次。 因此,我需要给这些列起别名。如果我要这样做,我会写成: 但这是行不通的。谢谢你的帮助! 编辑: 这是我实际上得到的数据: 这是我想获取的数据(同时仍使用): 问题答案: 您不能使用别名。别名可用于单个列。 您必须改为为每列加上别名。 因此,不幸的是,如果您有很多列,则需要执行以下操作: