如何将来自不同表的许多查询结果合并到一个结果表中?
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
目标是一个查询结果(表),其中每个查询列具有不同的列。
答案 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