对于Postgres列别名的名称,在长度,包含非ASCII字符的能力等方面是否有任何限制?从版本8.1到现在,这些限制是否有任何变化?
据我所知,AS
用于创建别名.因此,将一个长名称别名作为较短名称是有意义的.但是,我看到一个SQL
查询NULL as ColumnName
这意味着什么?
SELECT *, NULL as aColumn
Run Code Online (Sandbox Code Playgroud) 我只是SQL的初学者,但我遇到了这个恼人的错误.SQL遇到此脚本的WHERE子句的问题:
SELECT
ITEM_ID, ITEM_PRICE, DISCOUNT_AMOUNT, QUANTITY,
(ITEM_PRICE*QUANTITY) AS price_total,
(DISCOUNT_AMOUNT*QUANTITY) AS discount_total,
((ITEM_PRICE-DISCOUNT_AMOUNT)*QUANTITY) AS item_total
FROM ORDER_ITEMS
WHERE item_total > 500
ORDER BY item_total;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error starting at line : 1 in command -
SELECT
ITEM_ID, ITEM_PRICE, DISCOUNT_AMOUNT, QUANTITY,
(ITEM_PRICE*QUANTITY) AS price_total,
(DISCOUNT_AMOUNT*QUANTITY) AS discount_total,
((ITEM_PRICE-DISCOUNT_AMOUNT)*QUANTITY) AS item_total
FROM ORDER_ITEMS
WHERE item_total > 500
ORDER BY item_total DESC;
Error at Command Line : 7 Column : 7
Error report -
SQL Error: ORA-00904: "ITEM_TOTAL": invalid identifier
00904. 00000 - "%s: …
Run Code Online (Sandbox Code Playgroud) 我可以修改使用的列别名下一avg_time
并cnt
在表达ROUND(avg_time * cnt, 2)
?
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,
ROUND(avg_time * cnt, 2) as slowdown, path
FROM
loadtime
GROUP BY
path
ORDER BY
avg_time DESC
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
它将引发下一个错误:
ERROR: column "avg_time" does not exist
LINE 7: ROUND(avg_time * cnt, 2) as slowdown, path
Run Code Online (Sandbox Code Playgroud)
但是,下一个可以正常工作(使用主表达式而不是列别名:
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 …
Run Code Online (Sandbox Code Playgroud) 我有一个名为 temp 的数据库,其中包含每日股票价格:
Ticker Date price
ABC 01/01/13 100.00
ABC 01/02/13 101.50
ABC 01/03/13 99.80
ABC 01/04/13 95.50
ABC 01/05/13 78.00
XYZ 01/01/13 11.50
XYZ 01/02/13 12.10
XYZ 01/03/13 17.15
XYZ 01/04/13 14.10
XYZ 01/05/13 15.55
Run Code Online (Sandbox Code Playgroud)
drawdown
我计算了每只股票的最高价格和每天每只股票的累计价格的运行总和:(最高价格 - 当前价格)/最高价格)
SELECT t.Ticker,
t.Date,
t.price,
max(t.price) over (partition by ticker order by date) as max_price,
(t.price / max(t.price) over (partition by ticker order by date)) - 1
as Drawdown
FROM [temp] t;
Ticker Date price max_price Drawdown
ABC 01/01/13 100.00 100.00 …
Run Code Online (Sandbox Code Playgroud) 我想要实现的是在我的数据库中我有一个名为channel的表我正在使用laravel的eloquent类从表中访问这些属性我面临的问题是
表名是列,列名是通道
所以当访问该属性时看起来像这样.
User::find(1)->channel->channel
Run Code Online (Sandbox Code Playgroud)
我怎么能修改这个说
User::find(1)->channel->name
Run Code Online (Sandbox Code Playgroud)
我们无法更改数据库中的表名.
我想到的选项:
1)为需要更改列的表创建视图.太乱了...
2)使用列别名.... laravel文档...叹息..不知道怎么样?
3)使用带有create_function的属性集来调用this-> channel但我很确定它不起作用,因为laravel正在使用动态属性.当它在数组中填写时,我非常确定它会将其更改为列的名称.
我可以在我的belongs_to/hasOne/hasMany函数中将属性更改为我想要使用的名称的别名,以便稍后我可以更改它.我不知道那会有多好用......
有什么想法吗?非常感激
我对我创建的一个查询有一个奇怪的'问题'.鉴于下一个查询:
SELECT
ID,
DistanceFromUtrecht,
(
SELECT
(MAX(DateUntil) - (ReleaseDays * 60 * 60 * 24))
FROM
PricePeriod
WHERE
PricePeriod.FK_Accommodation = Accommodation.ID
) AS LatestBookableTimestamp
FROM
Accommodation
WHERE
LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)
phpMyAdmin不断抛出一个关于没有名为'LatestBookableTimestamp'的列的错误,即使我有一个由子查询检索的列,该别名.我也尝试过用tableprefix选择每一列.这不起作用.最后,我通过table-alias选择了所有列,并为表提供了别名.一切都没有运气.
有人能告诉我我做错了什么吗?我甚至搜索了一些资源,看看我是不是错了,但在很多情况下,互联网上的作者使用与我相同的语法.
我有2个表,包含以下字段.
询问
Select t1.*,
t2.*
from table1 t1,
join table2 t2 on table1.DD = table2.EE
Run Code Online (Sandbox Code Playgroud)
我的数据列返回以下列名称:
AA, BB, CC, DD, **AA_1**, **CC_1**, EE
Run Code Online (Sandbox Code Playgroud)
我不希望列名这样.我希望他们将表名称作为common(或所有列)的名称前缀.我可以解决这个问题:
select t1.AA as t1_AA, t1.BB as t1_BB, t1.CC as t1_CC, t1.DD as t1_DD,
t2.AA as t2_AA, t2.CC as t2_CC, t2.EE as t2_EEE
from table1 t1,
inner join table2 t2
on table1.DD = table2.EE
Run Code Online (Sandbox Code Playgroud)
但这意味着每个地方的每个选择都会变得长500行.在oracle中有没有神奇的方法呢?基本上我想写我的代码
select t1.* as t1_*, t2.* as t2_*
from table1 t1,
inner join table2 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Scala中更改DataFrame列的名称。我可以轻松更改直接字段的列名,但在转换数组结构列时遇到困难。
以下是我的DataFrame模式。
|-- _VkjLmnVop: string (nullable = true)
|-- _KaTasLop: string (nullable = true)
|-- AbcDef: struct (nullable = true)
| |-- UvwXyz: struct (nullable = true)
| | |-- _MnoPqrstUv: string (nullable = true)
| | |-- _ManDevyIxyz: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
但我需要如下所示的架构
|-- vkj_lmn_vop: string (nullable = true)
|-- ka_tas_lop: string (nullable = true)
|-- abc_def: struct (nullable = true)
| |-- uvw_xyz: struct (nullable = true)
| | |-- mno_pqrst_uv: string (nullable = true)
| | |-- …
Run Code Online (Sandbox Code Playgroud) 今天我看到有人使用这种语法(A)在 sql select 中设置列别名。
Select [ColumnAlias] = Column1 FROM Table
Run Code Online (Sandbox Code Playgroud)
通常我使用
Select Column1 AS [ColumnAlias] FROM Table
Run Code Online (Sandbox Code Playgroud)
我曾经=
设置局部变量,但从未设置为别名。Select @LocalVar = Column1 FROM Table
有什么理由比 A 更喜欢 B 吗?我似乎在 A 搜索中找不到太多信息。
所以,我有一个看起来像这样的查询:
SELECT id,
DATE_FORMAT(CONVERT_TZ(callTime,'+0:00','-7:00'),'%b %d %Y') as callDate,
DATE_FORMAT(CONVERT_TZ(callTime,'+0:00','-7:00'),'%H:%i') as callTimeOfDay,
SEC_TO_TIME(callLength) as callLength
FROM cs_calldata WHERE
customerCode='999999-abc-blahblahblah' AND
CONVERT_TZ(callTime,'+0:00','-7:00') >= '2010-04-25' AND
CONVERT_TZ(callTime,'+0:00','-7:00') <= '2010-05-25'
Run Code Online (Sandbox Code Playgroud)
如果你像我一样,你可能会开始认为,如果我没有要求它计算CONVERT_TZ(callTime,'+0:00','-7:00')
四次单独的时间,它可能会提高可读性和可能的查询性能.
所以我尝试为该表达式创建一个列别名,并用该别名替换进一步的出现:
SELECT id,
CONVERT_TZ(callTime,'+0:00','-7:00') as callTimeZoned,
DATE_FORMAT(callTimeZoned,'%b %d %Y') as callDate,
DATE_FORMAT(callTimeZoned,'%H:%i') as callTimeOfDay,
SEC_TO_TIME(callLength) as callLength
FROM cs_calldata WHERE
customerCode='5999999-abc-blahblahblah' AND
callTimeZoned >= '2010-04-25' AND
callTimeZoned <= '2010-05-25'
Run Code Online (Sandbox Code Playgroud)
这是我学习的时候,引用MySQL手册:
标准SQL不允许在WHERE子句中引用列别名.强制执行此限制是因为在评估WHERE子句时,可能尚未确定列值.
所以,这种方法似乎已经死了.
如何用这样的重复表达式编写查询来处理它?
我不擅长 SQL,我想在下面的查询中使用分区来获取 MAX,但是当我在没有该最大驱动列的 where 子句的情况下使用相同的查询时,它会说该列不存在,但是如果我从 where 中删除该列我可以在选择中看到存在相同的列。
select
MAX(case when total_split_count = 0 or total_split_count is null then total_split_count else 1 end) OVER (PARTITION BY ia.col1,ia.col2,ia.col3,ia.col4,ia.col5,ia.col6) as bb
from audits.tbl_name ia
where bb = 1
Run Code Online (Sandbox Code Playgroud)
错误:列“bb”不存在位置:304
其中 bb = 1 ^ 1 语句失败。
但查询使用 where 子句运行:
select
MAX(case when total_split_count = 0 or total_split_count is null then total_split_count else 1 end) OVER (PARTITION BY ia.col1,ia.col2,ia.col3,ia.col4,ia.col5,ia.col6) as bb
from audits.tbl_name ia
Run Code Online (Sandbox Code Playgroud)
注意:我在运行时通过“as”创建了该列。
我正在查询数据库:
SELECT SUM(Hours)
from User
where surname = 'johnson';
Run Code Online (Sandbox Code Playgroud)
每当我运行它时,如您所知,它将显示名为SUM(Hours)的选定列.
有没有办法在不改变数据库表的情况下"重命名"它?
column-alias ×13
sql ×10
postgresql ×3
mysql ×2
oracle ×2
alias ×1
apache-spark ×1
case ×1
database ×1
dataframe ×1
expression ×1
laravel ×1
php ×1
scala ×1
select ×1
view ×1