将来自不同表的多个查询结果组合到一个查询结果表中

时间:2020-04-17 01:45:11

标签: sql oracle

如何将来自不同表的许多查询结果合并到一个结果表中?

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 个答案:

答案 0 :(得分:1)

由于所有似乎都具有 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