不使用显式的JOIN运算符,将学校安全得分为1的社区区域人均收入。
SELECT per_capita_income,community_area_name
FROM CENSUS_DATA
where community_area_name =
(SELECT community_area_name FROM CHICAGO_PUBLIC_SCHOOLS where safety_score='1' )
响应是“ per_capita_income”“ community_area_name” 没有价值吗??? 感谢大家在下面的所有回复,但结果没有改变,没有价值,但是我尝试了:
SELECT community_area_name FROM CHICAGO_PUBLIC_SCHOOLS
where safety_score='1'
得到的结果是“ WASHINGTON PARK”,并进行了后续查询
SELECT per_capita_income,community_area_name FROM CENSUS_DATA
where community_area_name = 'WASHINGTON PARK'
我又得到了;
per_capita_income community_area_name
我已经检查了以下代码,以确认并获取所有per_capita_income值。华盛顿公园
SELECT per_capita_income,community_area_name FROM CENSUS_DATA
所以,最终我无法获得capita_income值。 数据在以下链接中
CENSUS_DATA:
https://ibm.box.com/shared/static/05c3415cbfbtfnr2fx4atenb2sd361ze.csv
CHICAGO_PUBLIC_SCHOOLS
https://ibm.box.com/shared/static/f9gjvj1gjmxxzycdhplzt01qtz0s7ew7.csv
CHICAGO_CRIME_DATA:
https://ibm.box.com/shared/static/svflyugsr9zbqy5bmowgswqemfpm1x7f.csv
答案 0 :(得分:0)
您似乎正在寻找这样的隐式联接:
SELECT cd.per_capita_income,cd.community_area_name
FROM CENSUS_DATA as cd, CHICAGO_PUBLIC_SCHOOLS as cps
where cd.community_area_name = cps.community_area_name
AND cps.safety_score='1'
答案 1 :(得分:0)
如@lau所评论,您所看到的问题很可能来自数据。
但是,我还要指出,这种情况存在潜伏的问题:
WHERE community_area_name =
(SELECT community_area_name FROM CHICAGO_PUBLIC_SCHOOLS where safety_score='1' )
如果CHICAGO_PUBLIC_SCHOOLS
中存在多个记录,且安全评分等于1,则相等条件将无法正常工作(在大多数RDBMS中,这会导致运行时错误)。
此条件应重写为IN
条件:
SELECT per_capita_income,community_area_name
FROM CENSUS_DATA
WHERE community_area_name IN
(SELECT community_area_name FROM CHICAGO_PUBLIC_SCHOOLS where safety_score='1' )
或作为具有EXIST
条件的相关子查询:
SELECT c.per_capita_income, c.community_area_name
FROM CENSUS_DATA c
WHERE EXISTS (
SELECT 1
FROM CHICAGO_PUBLIC_SCHOOLS s
WHERE s.community_area_name = c.community_area_name AND s.safety_score = '1'
)
答案 2 :(得分:0)
我已经查看了数据,并且正如每个人所期望的,我可以确认您的数据有问题。
COMMUNITY_AREA_NAME
在CHICAGO_PUBLIC_SCHOOL中为大写
在CENSUS_DATA中是适当的情况。
小写的字符串与大写的字符串始终不同,并且两者都与大写的字符串不同。
正确的解决方案可能是检查数据库设计并将外键放在某个地方。我们没有足够的细节来帮助解决此类问题。
例如,较少的所有内容均设置为大写并重新运行已更正的SELECT
。
UPDATE CENSUS_DATA SET community_area_name = INITCAP(community_area_name);
UPDATE CHICAGO_PUBLIC_SCHOOLS SET community_area_name = INITCAP(community_area_name);
SELECT per_capita_income,community_area_name
FROM CENSUS_DATA
where community_area_name IN
(SELECT community_area_name FROM CHICAGO_PUBLIC_SCHOOLS where safety_score='1' )
答案 3 :(得分:0)
SELECT per_capita_income FROM CENSUS_DATA WHERE upper(community_area_name) IN
(SELECT "Community_Area_Name" FROM CHICAGO_PUBLIC_SCHOOLS WHERE "Safety_Score" = 1 )
答案 4 :(得分:0)
UPDATE CENSUS_DATA SET COMMUNITY_AREA_NAME = UPPER(COMMUNITY_AREA_NAME)
选择CD.PER_CAPITA_INCOME
来自CENSUS_DATA CD,CHICAGO_PUBLIC_SCHOOLS CPS
其中CD.COMMUNITY_AREA_NAME = CPS.COMMUNITY_AREA_NAME
和CPS.SAFETY_SCORE = 1
CENSUS_DATA COMMUNITY_AREA_NAME列的大小写为小写,而CHICAGO_PUBLIC_SCHOOLS COMMUNITY_AREA_NAME列的大小写为大写,因此最好使用UPDATE操作更新特定列并执行查询操作以获得所需答案
答案 5 :(得分:0)
尝试这个:
SELECT c.per_capita_income, c.community_area_name
FROM CENSUS_DATA c, CHICAGO_PUBLIC_SCHOOLS s
WHERE s.COMMUNITY_AREA_NUMBER = c.COMMUNITY_AREA_NUMBER AND s.SAFETY_SCORE = '1' ;
答案 6 :(得分:0)
您的答案何时不应该包含任何联接,您必须使用叉积,例如,如果您有2个表,则必须使用select * from table1,table2 where condition
对于您而言,答案应该是
select PER_CAPITA_INCOME from school S,cencus_data C where C.COMMUNITY_AREA_NAME = S.COMMUNITY_AREA_NAME and S.SAFETY_SCORE=1
如果不起作用,请更改这两个表之间的任何其他公共列
我希望对您有帮助
答案 7 :(得分:0)
选项1:
select PER_CAPITA_INCOME from CENSUS_DATA
where UPPER(COMMUNITY_AREA_NAME) = (
select COMMUNITY_AREA_NAME from CHICAGO_PUBLIC_SCHOOLS where SAFETY_SCORE = 1
);
选项2:
select PER_CAPITA_INCOME from CENSUS_DATA
where UPPER(COMMUNITY_AREA_NAME) in (
select COMMUNITY_AREA_NAME from CHICAGO_PUBLIC_SCHOOLS where SAFETY_SCORE = 1
)
任何一个都可以正常工作。
答案 8 :(得分:0)
如果要在Coursera上进行“数据科学的数据库和SQL”课程。问题出在数据集中。如果您查看人口普查数据csv,则社区名称使用小写字母,而在学校中,csv使用大写字母。所以这应该可以解决问题
%sql SELECT COMMUNITY_AREA_NAME,PER_CAPITA_INCOME \ 来自CENSUS_DATA \ 哪里UCASE(COMMUNITY_AREA_NAME)=(从CHICAGO_PUBLIC_SCHOOLS那里选择“ Community_Area_Name”,其中“ Safety_Score” = 1)
答案 9 :(得分:0)
%sql从人口普查数据中选择community_area_name,per_capita_income,其中community_area_name ='华盛顿公园';
答案 10 :(得分:0)
这对我有用。
%%sql
select CPS.COMMUNITY_AREA_NAME, CD.PER_CAPITA_INCOME, CPS.SAFETY_SCORE
from CENSUS_DATA CD, CHICAGO_PUBLIC_SCHOOLS CPS
where CD.COMMUNITY_AREA_NUMBER = CPS.COMMUNITY_AREA_NUMBER
and SAFETY_SCORE = 1;
答案 11 :(得分:0)
问题是芝加哥学校的community_area_name为大写,而人口普查数据为小写 所以这段代码对我有用,
%sql从CENUS_DATA中选择per_capita_income,community_area_number,community_area_name,其中community_area_number进入(从SCHOOLS中选择safety_score = 1的community_area_number)
答案 12 :(得分:-1)
import matplotlib.pyplot as plt
to_utility = [-3.4000000000000004, -2.6999999999999993, -0.9000000000000004, 1.8000000000000007, -1.0999999999999996,
-1.6999999999999993, 0.6999999999999993, 5.300000000000001, 0.1999999999999993, 2.3999999999999986, 2.5,
1.3999999999999986, -3.6999999999999993, -8.8, -6.600000000000001, -9.600000000000001, -11,
-7.800000000000001, -8.4, -8.9, -11.7, -7.300000000000001, -8.9, -4.9]
shifted = 6.652632153034208
curve_max = max(to_utility)
curve_min = min(to_utility)
upper_shift_line = [curve_max - shifted] * len(to_utility)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title('To Utility Curve')
ax1.set_ylim([curve_min, curve_max])
ax1.plot(range(len(to_utility)), to_utility, upper_shift_line)
ax1.fill_between(range(len(to_utility)), to_utility, upper_shift_line, where=to_utility > upper_shift_line,
interpolate=True)
plt.show()
%%sql select per_capita_income from CENSUS
where community_area_number = (select community_area_number from SCHOOLS where safety_score = 1)
附近删除'