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_code
和 state
)
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
这就是你的答案。
我是 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_code
和state
)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
这就是你的答案。