【发布时间】:2018-04-29 13:50:09
【问题描述】:
我对 SQL 很陌生,所以我问这个问题。我正在尝试计算有保修和不保修的物品的平均交货时间。保修可以显示为 1 或 NaN,因此该列不是 NUMERIC。 我写了我认为代码应该看起来的样子,但遇到了错误。
SHIPPING_TABLE:
(复合键)
Item_id
Basket_id
seller_id
warranty
postage_class
FIRST_CLASS:
(全部作为主键)
Item_id
Basket_id
seller_id
warranty
postage_class
delivery_time
create table AVG_DELIVERY_TIME as
(
SELECT DELIVERY_TIME AVG
,(DELIVERY_TIME)
FROM
(
SELECT SHIPPING_TABLE_LINK.warranty
,FIRST_CLASS.DELIVERY_TIME
FROM FIRST_CLASS
INNER JOIN SHIPPING_TABLE_LINK
ON SHIPPING_TABLE_LINK.warranty = FIRST_CLASS.DELIVERY_TIME
)
);
错误报告 - ORA-01722: 无效号码 01722. 00000 - “无效号码” *原因:指定号码无效。 *操作:指定一个有效的数字。
【问题讨论】:
-
您的运输表和头等舱表几乎相同,只是少了几列。我建议您将它们合并到一个表中,然后为运输类型添加一列(它将是头等舱或其他费率)。除此之外,请告诉我们您正在使用什么数据库,并告诉我们错误是什么。
-
我正在使用 oracle sql,错误是:create table AVG_DELIVERY_TIME as (SELECT DELIVERY_TIME AVG,(DELIVERY_TIME) FROM (SELECT SHIPPING_TABLE_LINK.warranty, FIRST_CLASS.DELIVERY_TIME FROM FIRST_CLASS INNER JOIN SHIPPING_TABLE_LINK ON SHIPPING_TABLE_LINK.warrant FIRST_CLASS.DELIVERY_TIME)) 错误报告 - ORA-01722: 无效号码 01722. 00000 - “无效号码” *原因:指定号码无效。 *操作:指定一个有效的数字。
-
您能否为这些表包括您的创建表语句;即显示列的类型?问题可能是某些列类型是文本,而有些是数字。
-
是的,保证是 VARCHAR 数据类型,因为它可以用 1 或 NaN 表示。
-
我对 Oracle 的记忆有点生疏,但我认为您无法从选择中创建表。您可以从 SELECT 插入到不存在的表中,这将导致创建表和内容。再说一次,不是 100% 肯定,但试一试。
标签: sql oracle inner-join average