SQL 未知列?

SQL unknown columns?

我是 SQL 的新手,遇到此查询时遇到困难:

包含一个或多个邮政编码且人口超过 20,000 的德克萨斯州每个县的平均海拔。

这是我目前拥有的:

SELECT county, zip_code, state, AVG(elevation) 
FROM zip_codes 
WHERE state=’TX’  
GROUP BY county 
HAVING population > 20000 
ORDER BY county;

ERROR 1054 (42S22): Unknown column '’TX’' in 'where clause'

但是当我从 zip_codes 数据库 select state 时,它就在那里。

您使用了错误的 单引号。应该是

WHERE state = 'tx'

而不是

WHERE state = ’tx’

你的是……从哪里来的?某些编辑器,如 MS Word 或类似的编辑器,会创建那些 "fancy" 引号。好吧,不要使用它们。

除此之外,未聚合的列应 all 成为 GROUP BY 子句的一部分:

group by county, zip_code, state
SELECT county, zip_code, state, AVG(elevation) 
FROM zip_codes 
WHERE state='TX'
GROUP BY county,  zip_code, state 
where population > 20000 
ORDER BY county;

解决报价问题是必须的,正如 Littlefoot 所回答的那样。

但是,您的查询仍然无效 Oracle SQL,因为:

  • select 子句有两个非聚合列,它们不属于 group by 子句(zip_codestate

  • having 子句中的 population 列也是如此,它既不是聚合的也不是 group by 子句的一部分

对于此作业:

The average elevation of each Texas county which contains one or more zip code with a population over 20,000.

假设 table 中的每条记录对应于不同的 zip_code(这似乎是相关的,因为 table 本身称为 zip_codes),您可以短语:

select county, state, avg(elevation) avg_elevation
from zip_codes 
where state= 'TX'  
group by county, state 
having max(population) > 20000 
order by county;

没有数据样本,很难准确理解发生了什么,但我会尝试一下。

你的作业说你要计算 "The average elevation of each Texas county which contains one or more zip code with a population over 20,000"。让我们分解一下您需要查找的作业元素:

Average elevation
  Of each county in Texas
    Which has one or more zip code
      With population > 20,000

我们有 table 邮政编码,包括县、州和海拔。

那么,好的 - 第一个问题:找到德克萨斯州的所有邮政编码:

SELECT *
  FROM ZIP_CODES
  WHERE STATE = 'TX'

好的,到目前为止很简单。现在,将其限制为人口超过 20,000 的邮政编码:

SELECT *
  FROM ZIP_CODES
  WHERE STATE = 'TX' AND
        POPULATION > 20000

很酷 - 但这为我们提供了人口 > 20000 的县中每个邮政编码的条目。我们所关心的是至少有一个邮政编码且人口超过 20000 的个别县。那么

怎么样
SELECT DISTINCT COUNTY
  FROM ZIP_CODES
  WHERE STATE = 'TX' AND
        POPULATION > 20000

太棒了。现在我们需要计算上述查询返回的每个县的平均海拔:

SELECT COUNTY, AVG(ELEVATION)
  FROM ZIP_CODES
  WHERE STATE = 'TX' AND
        COUNTY IN (SELECT DISTINCT COUNTY
                     FROM ZIP_CODES
                     WHERE STATE = 'TX' AND
                           POPULATION > 20000)
  GROUP BY COUNTY
  ORDER BY COUNTY

这就是你的答案。