我是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;
错误1054(42S22):'where子句'中的未知列''TX''
但是当我从state
数据库中选择zip_codes
时,就在那里。
解决报价问题是必须的,Littlefoot回答。
但是,您的查询仍然是无效的Oracle SQL,因为:
select
子句有两个未聚合的列,它们不属于group by
子句(zip_code
和state
)
population
子句中的列having
相同,既不是聚合的,也不是group by
子句的一部分
为此作业:
[德克萨斯州每个县的平均海拔,其中包含一个或多个邮政编码,人口超过20,000。
假设表中的每个记录对应于一个不同的zip_code(鉴于表本身称为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;
您正在使用错误单引号。应该是
WHERE state = 'tx'
代替
WHERE state = ’tx’
您是...从哪里来的?某些编辑器(例如MS Word或类似工具)会创建这些“花式”引号。好吧,不要使用它们。
此外,未聚合的列应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;
没有数据样本,很难准确了解正在发生的事情,但我会对其进行调查。
您的任务表明您要计算“每个德克萨斯州县的平均海拔,其中包含一个或多个邮政编码超过20,000的人口”。让我们分解一下您需要查找的分配元素:
Average elevation
Of each county in Texas
Which has one or more zip code
With population > 20,000
并且我们有一个邮政编码表,包括县,州和海拔。
所以,好的-第一个问题:在德克萨斯州找到所有邮政编码:
SELECT *
FROM ZIP_CODES
WHERE STATE = 'TX'
好,到目前为止很容易。现在,将其限制为人口超过20,000的邮政编码:
SELECT *
FROM ZIP_CODES
WHERE STATE = 'TX' AND
POPULATION > 20000
很酷-但这为我们提供了人口> 20000的县中每个邮政编码的条目。我们所关心的是各个县中至少有一个邮政编码超过20K的县。那么
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
还有您的答案。