Объединение двух запросов, которые используют одну и ту же таблицу и один и тот же столбец - PullRequest
0 голосов
/ 15 марта 2019

Итак, я пытаюсь создать запрос, используя одну и ту же таблицу и столбец для двух разных функций.Я могу создать каждый запрос отдельно, и он будет работать гладко и эффективно.

первый запрос:

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 (" жертва ")" TOTAL ALLEGED "," жертва "} и любой другой способ, которым я пытаюсь это исправить, ошибка говорит о том, что {больше чем одна строкавозвращается подзапросом, используемым в качестве выражения}

Может кто-нибудь сказать мне, как я могу эффективно объединить эти два запроса? Заранее большое спасибо.

1 Ответ

0 голосов
/ 15 марта 2019

Вы можете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...