【发布时间】:2014-10-15 02:19:51
【问题描述】:
对于以下问题,我有以下代码,但是百分比恰好为零:
SELECT p.state, (p.popestimate2011/sum(p.popestimate2011)) * 100
FROM pop_estimate_state_age_sex_race_origin p
WHERE p.age >= 21
GROUP BY p.state;
还有这里的表架构:
sqlite> .schema pop_estimate_state_age_sex_race_origin
CREATE TABLE pop_estimate_state_age_sex_race_origin (
sumlev NUMBER,
region NUMBER,
division NUMBER,
state NUMBER,
sex NUMBER,
origin NUMBER,
race NUMBER,
age NUMBER,
census2010pop NUMBER,
estimatesbase2010 NUMBER,
popestimate2010 NUMBER,
popestimate2011 NUMBER,
PRIMARY KEY(state, age, sex, race, origin),
FOREIGN KEY(sumlev) REFERENCES SUMLEV(sumlev_cd),
FOREIGN KEY(region) REFERENCES REGION(region_cd),
FOREIGN KEY(division) REFERENCES DIVISION(division_cd),
FOREIGN KEY(sex) REFERENCES SEX(sex_cd),
FOREIGN KEY(race) REFERENCES RACE(race_cd),
FOREIGN KEY(origin) REFERENCES ORIGIN(origin_cd));
所以当我运行查询时,它只显示百分比为 0:
stat p.popestimate
---- -------------
1 0
2 0
4 0
5 0
6 0
8 0
9 0
10 0
11 0
12 0
13 0
15 0
16 0
17 0
18 0
19 0
20 0
21 0
22 0
23 0
我试图使用嵌套查询来编写它,但也没有得到任何地方:
SELECT p.state, 100.0 * sum(p.popestimate2011) / total_pop AS percentage
FROM pop_estimate_state_age_sex_race_origin p
JOIN (SELECT state, sum(p2.popestimate2011) AS total_pop
FROM pop_estimate_state_age_sex_race_origin p2) s ON (s.state = p.state)
WHERE age >= 21
GROUP BY p.state, total_pop
ORDER BY p.state;
我目前遇到的问题是它只显示一行作为结果,并且只显示最后一个状态号(状态 ID=56)的结果:
56 0.131294163192301
【问题讨论】:
-
您能否给出一个提示,而不是仅仅投反对票并关闭问题?你也可以像 stackexchange 的道德规范中提到的那样“做个好人”吗?不是每个人都知道一切!
-
您的任务需要嵌套查询。
-
@PM77-1 你能看看我更新问题的结尾吗?嵌套查询不起作用。你能给出任何提示有什么问题吗?
-
根据新的编辑撤回反对票。样本数据(和预期结果)将是相关的。在子查询中添加 GROUP BY 子句。
-
如果您明确使用 SQLite,为什么还要用
postgresql标记它?
标签: sql database postgresql sqlite