【问题标题】:Subquery not returning data when combining two different datasets组合两个不同的数据集时子查询不返回数据
【发布时间】:2018-09-29 04:53:39
【问题描述】:

我正在尝试将两个不同的数据集与 Google BigQuery 上的子查询结合起来。

当我单独使用子查询时,它会运行并返回每年的总平均温度。但是,当我将查询合并为子查询时,它只返回所述所有时期的平均温度,而不是每年的平均温度。

我的代码:

#standardSQL
SELECT t1.year, gas_fuel, liquid_fuel, solid_fuel, cement, annual_anomaly, (SELECT avg(temp)
FROM `bigquery-public-data.noaa_gsod.gsod*`
WHERE year > '1982') as average_temperature
FROM `cs779-term-project.CO2_FossilFuel.GlobalEmissions` as t1
JOIN `cs779-term-project.CO2_FossilFuel.SeaLevels` as t2
on t1.year = t2.year
Where t1.year > 1982
ORDER BY t1.year ASC;

另外,当我在子查询中添加GROUP BY year 时,它会显示以下错误:

错误:标量子查询产生了多个元素

谢谢!

【问题讨论】:

  • 是否要将t1.yearavg(tmp) 显示为average_temperature?然后您可能希望将子查询中的谓词year > '1982'更改为year = t1.year
  • 是的,你是对的。谢谢!问题在于 year > '1982' 是一个字符串,而 year = t1.year 它是一个整数。所以它现在说:错误:对于参数类型的运算符 = 没有匹配的签名:STRING,INT64。支持的签名:ANY = [5:9] 处的 ANY。有什么想法吗?

标签: mysql sql oracle oracle11g google-bigquery


【解决方案1】:

如果需要年平均温度,则需要在子查询条件下使用查询中的年份:

SELECT t1.year, gas_fuel, liquid_fuel, solid_fuel, cement, annual_anomaly
, (SELECT avg(temp)
  FROM `bigquery-public-data.noaa_gsod.gsod*`
  WHERE year = t1.year) as average_temperature
FROM `cs779-term-project.CO2_FossilFuel.GlobalEmissions` as t1
JOIN `cs779-term-project.CO2_FossilFuel.SeaLevels` as t2
on t1.year = t2.year
Where t1.year > 1982
ORDER BY t1.year ASC;

【讨论】:

  • 是的,你是对的。谢谢!问题在于 year > '1982' 是一个字符串,而 year = t1.year 它是一个整数。所以它现在说:错误:对于参数类型的运算符 = 没有匹配的签名:STRING,INT64。支持的签名:ANY = [5:9] 处的 ANY。有什么想法吗?
  • 投射/转换/连接?例如在 oracle 中连接year = '' || t1.year
  • 是的!我改用了 cast 函数,因为连接不起作用。非常感谢!!
【解决方案2】:

这是我使用并运行的最终代码:

#standardSQL
SELECT t1.year, gas_fuel, liquid_fuel, solid_fuel, cement, annual_anomaly
, (SELECT avg(temp)
  FROM `bigquery-public-data.noaa_gsod.gsod*`
  WHERE CAST(year as INT64) = t1.year) as average_temperature
FROM `cs779-term-project.CO2_FossilFuel.GlobalEmissions` as t1
JOIN `cs779-term-project.CO2_FossilFuel.SeaLevels` as t2
on t1.year = t2.year
Where t1.year > 1982
ORDER BY t1.year ASC;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2014-10-04
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多