所以我正在尝试使用相同的表和列为两个不同的函数创建一个查询。我可以单独创建每个查询,它可以平稳有效地运行。
第一个查询:
SELECT "y2018-cpsbsng"."fiscal_year" as "FY",
"y2018-cpsbsn"."county", "y2018-cpstxsc"."child_population" as "Child Population",
SUM("y2018-cpsbsng"."victims") AS "TOTAL ALLEGED"
FROM "y2018-cpstxsc" INNER JOIN "y2018-cpsbsng" USING ("county", "fiscal_year")
GROUP BY "y2018-cpsbsng"."fiscal_year", "y2018-cpsbsng"."county", "y2018-cpstxsc"."child_population"
ORDER BY "y2018-cpsbsng"."fiscal_year" ASC, "y2018-cpsbsng"."county" ASC
输出1:
FY county Child Population TOTAL ALLEGED
2008 Anderson 11237 808
2008 Andrews 3821 297
第二个查询:
SELECT "fiscal_year", "county", "victims" as "Confirmed Victims"
FROM "y2018-cpsbsng"
WHERE "victims" in
(select "victims" FROM "y2018-cpsbsng"
where "y2018-cpsbsng"."confirmed_victims" = 'Confirmed Victim')
输出2:
fiscal_year county Confirmed Victims
2008 Anderson 8
2008 Andrews 1
但是,一旦我尝试将两个查询合并为一个:
SELECT "fiscal_year","county", SUM("victims") AS "TOTAL ALLEGED",
victims
FROM "y2018-cpsbsng"
WHERE victims IN
(SELECT "victims"
FROM "y2018-cpsbsng"
WHERE "y2018-cpsbsng"."confirmed_victims" = 'Confirmed Victim')
GROUP BY "fiscal_year", "county", victims
ORDER BY "fiscal_year" ASC,"county" ASC
发生这种情况(最终输出):
fiscal_year county TOTAL ALLEGED victims
2008 Anderson 247 247
2008 Andrews 561 561
如果我摆脱了GROUP BY ......“受害者”(我认为是造成重复数字的原因)我会收到错误,说{column“y2018-cpsbsng.victims”必须出现在GROUP BY子句中或用于集合函数LINE 1:... ear“,”county“,SUM(”victim“)”TOTAL ALLEGED“,”victim“}以及我尝试修复它的任何其他方式错误说{更多用作表达式的子查询返回的一行}
任何人都可以告诉我如何有效地结合这两个查询?非常感谢你提前。
您可以将JOIN
两个查询作为表表达式。 ORDER BY
需要在最后提取。
例如:
select
b."fiscal_year",
a."county",
a."TOTAL ALLEGED",
b."Confirmed Victims" as "Vistims"
from ( -- first query
SELECT "y2018-cpsbsng"."fiscal_year" as "FY",
"y2018-cpsbsn"."county", "y2018-cpstxsc"."child_population" as "Child Population",
SUM("y2018-cpsbsng"."victims") AS "TOTAL ALLEGED"
FROM "y2018-cpstxsc" INNER JOIN "y2018-cpsbsng" USING ("county", "fiscal_year")
GROUP BY "y2018-cpsbsng"."fiscal_year", "y2018-cpsbsng"."county", "y2018-cpstxsc"."child_population"
) a
join ( -- second query
SELECT "fiscal_year", "county", "victims" as "Confirmed Victims"
FROM "y2018-cpsbsng"
WHERE "victims" in
(select "victims" FROM "y2018-cpsbsng"
where "y2018-cpsbsng"."confirmed_victims" = 'Confirmed Victim')
) b on a."FY" = b."fiscal_year"
ORDER BY a."FY" ASC, a."county" ASC -- now the ordering
如果一个查询上的行在另一个查询中不存在,并且您在结果查询中需要它们,则必须使用FULL OUTER JOIN
而不是JOIN
。