【问题标题】:Average and Inner Join in SQLSQL中的平均和内连接
【发布时间】: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


【解决方案1】:

我相信您可以使用以下代码将保修列中的值更新为 0 而不是 NaN

更新表名 设置保修 = 0 WHERE 保修 ="NaN;

然后您可以创建新表并将该列指定为数字而不是 varchar。希望有帮助

【讨论】:

  • warrenty = NULL 最好指明NaN(不是数字)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 2014-03-13
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多