组合使用相同表和同一列的两个查询

问题描述 投票:0回答:1

所以我正在尝试使用相同的表和列为两个不同的函数创建一个查询。我可以单独创建每个查询,它可以平稳有效地运行。

第一个查询:

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“}以及我尝试修复它的任何其他方式错误说{更多用作表达式的子查询返回的一行}

任何人都可以告诉我如何有效地结合这两个查询?非常感谢你提前。

mysql database oracle postgresql
1个回答
0
投票

您可以将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

© www.soinside.com 2019 - 2024. All rights reserved.