Объединение нескольких результатов запроса из разных таблиц в одну таблицу результатов запроса - PullRequest
1 голос
/ 17 апреля 2020

Как мне go объединить множество результатов запроса, все из разных таблиц, в одну результирующую таблицу?

SELECT LEAST( (HSDIPLOMA + BACHELORDEGREE) / AVG(HSDIPLOMA + BACHELORDEGREE) OVER (),
              1
            ) as res
FROM EDUCATIONPROFILE
ORDER BY cid ASC
SELECT LEAST( (EMPLOYED -  UNEMPLOYED) / AVG(EMPLOYED - UNEMPLOYED) OVER (),
              1
            ) as res
FROM ECONOMICPROFILE
ORDER BY cid ASC
SELECT ((MAXTEMP + MINTEMP)/ 2)/ (SELECT MAX((MAXTEMP + MINTEMP)/ 2) FROM CLIMATEPROFILE) FROM CLIMATEPROFILE ORDER BY cid ASC
SELECT (crimecount) / (SELECT MAX(CRIMECOUNT)  FROM CRIMECOUNTS) FROM CRIMECOUNTS ORDER BY cid ASC

Цель - один результат запроса ( таблица) с разными столбцами, каждый из которых имеет один из соответствующих результатов запросов.

1 Ответ

1 голос
/ 17 апреля 2020

Поскольку все, кажется, имеют cid , просто JOIN каждый набор результатов:

SELECT educ.cid, educ.educ_res, econ.econ_res, clim.climate_res, crime.crime_res
FROM
  (SELECT LEAST((HSDIPLOMA + BACHELORDEGREE) / 
                 AVG(HSDIPLOMA + BACHELORDEGREE) OVER (), 1) AS educ_res
   FROM EDUCATIONPROFILE
  ) educ

INNER JOIN
  (SELECT LEAST((EMPLOYED -  UNEMPLOYED) / 
                AVG(EMPLOYED - UNEMPLOYED) OVER (), 1) AS econ_res
   FROM ECONOMICPROFILE
  ) econ
ON educ.cid = econ.cid

INNER JOIN 
  (SELECT ((MAXTEMP + MINTEMP)/ 2)/ 
           (SELECT MAX((MAXTEMP + MINTEMP)/ 2) FROM CLIMATEPROFILE) AS climate_res
   FROM CLIMATEPROFILE
  ) clim
ON clim.cid = educ.cid

INNER JOIN
  (SELECT (crimecount) / (SELECT MAX(CRIMECOUNT)  FROM CRIMECOUNTS) AS crime_res
   FROM CRIMECOUNTS
  ) crime
ON crime.cid = educ.cid

ORDER BY educ.cid

В качестве альтернативы с CTE:

WITH educ AS
  (SELECT LEAST((HSDIPLOMA + BACHELORDEGREE) / 
                 AVG(HSDIPLOMA + BACHELORDEGREE) OVER (), 1) AS educ_res
   FROM EDUCATIONPROFILE
  ), 
     econ AS 
  (SELECT LEAST((EMPLOYED -  UNEMPLOYED) / 
                AVG(EMPLOYED - UNEMPLOYED) OVER (), 1) AS econ_res
   FROM ECONOMICPROFILE
  ), 
     clim AS
  (SELECT ((MAXTEMP + MINTEMP)/ 2)/ 
           (SELECT MAX((MAXTEMP + MINTEMP)/ 2) FROM CLIMATEPROFILE) AS climate_res
   FROM CLIMATEPROFILE
  ), 
     crime AS
  (SELECT (crimecount) / (SELECT MAX(CRIMECOUNT)  FROM CRIMECOUNTS) AS crime_res
   FROM CRIMECOUNTS
  ) 

SELECT educ.cid, educ.educ_res, econ.econ_res, clim.climate_res, crime.crime_res
FROM educ
INNER JOIN econ 
    ON educ.cid = econ.cid
INNER JOIN clim
    ON clim.cid = educ.cid
INNER JOIN crim
    ON crime.cid = educ.cid
ORDER BY educ.cid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...