簡體   English   中英

合並SQL中的UNION結果

[英]Merging together results from a UNION in sql

我正在嘗試合並來自

SELECT MONTHNAME(terms) AS month, COUNT(DISTINCT project_num) as total 
FROM projects
WHERE terms >= '2017/01/01' AND Building_designer='SOMEPERSON'
GROUP BY MONTH(terms)
UNION
SELECT MONTHNAME(terms) AS month, COUNT(DISTINCT project_num) as total 
FROM archive
WHERE terms >= '2017/01/01' AND Building_designer='SOMEPERSON'
GROUP BY MONTH(terms)

我得到以下信息:SQL語句的結果

SQL語句的結果

我試圖做到這一點,因此總數將是該月多個實例的總和。 sql表完全相同。

這就是我想要的樣子:

在此處輸入圖片說明

FULL OUTER JOIN將是理想的。 但是在您的情況下,我們進行兩個級別的聚合:

SELECT month, MAX(total_projects) as total_projects, MAX(total_archive) as total_archive
FROM ((SELECT MONTHNAME(terms) AS month, COUNT(DISTINCT project_num) as total_projects, 0 as total_archive
       FROM projects
       WHERE terms >= '2017/01/01' AND Building_designer = 'SOMEPERSON'
       GROUP BY MONTH(terms)
      ) UNION ALL
      (SELECT MONTHNAME(terms) AS month, 0, COUNT(DISTINCT project_num
       FROM archive
       WHERE terms >= '2017/01/01' AND Building_designer = 'SOMEPERSON'
       GROUP BY MONTH(terms)
      )
     ) pa
GROUP BY month
ORDER BY month;

編輯:

哎呀。 您只想要一列。 如果您要計算每個月不同項目的數量,請union all合並,然后將結果合並到更高的級別:

SELECT month, COUNT(DISTINCT project_num) as total
FROM ((SELECT MONTHNAME(terms) AS month, project_num
       FROM projects
       WHERE terms >= '2017/01/01' AND Building_designer = 'SOMEPERSON'
      ) UNION ALL
      (SELECT MONTHNAME(terms) AS month, project_num
       FROM archive
       WHERE terms >= '2017/01/01' AND Building_designer = 'SOMEPERSON'
      )
     ) pa
GROUP BY month
ORDER BY month;

一個快速的想法就是做這樣的事情。 本質上,您想對每個表的計數求和。

select month, sum(total) from 
(
SELECT MONTHNAME(terms) AS month, COUNT(DISTINCT project_num) as total FROM projects WHERE terms >= '2017/01/01' AND Building_designer='SOMEPERSON' GROUP BY MONTH(terms)
UNION
SELECT MONTHNAME(terms) AS month, COUNT(DISTINCT project_num) as total FROM archive WHERE terms >= '2017/01/01' AND Building_designer='SOMEPERSON' GROUP BY MONTH(terms)
) group by month;

轉換為派生表,放置別名然后聚合

select 
x.month,
sum(x.total) [Total]
from (
SELECT
  MONTHNAME(terms) AS month,
  COUNT(DISTINCT project_num) AS total
FROM projects
WHERE terms >= '2017/01/01'
AND Building_designer = 'SOMEPERSON'
GROUP BY MONTH(terms)
UNION
SELECT
  MONTHNAME(terms) AS month,
  COUNT(DISTINCT project_num) AS total
FROM archive
WHERE terms >= '2017/01/01'
AND Building_designer = 'SOMEPERSON'
GROUP BY MONTH(terms)
) x

group by x.month

您可以嘗試在整個查詢中創建一個求和表達式。

SELECT month, SUM (total) FROM
(SELECT MONTHNAME(terms) AS month, COUNT(DISTINCT project_num) as total FROM projects WHERE terms >= '2017/01/01' AND Building_designer='SOMEPERSON' GROUP BY MONTH(terms)
UNION
SELECT MONTHNAME(terms) AS month, COUNT(DISTINCT project_num) as total FROM archive WHERE terms >= '2017/01/01' AND Building_designer='SOMEPERSON' GROUP BY MONTH(terms))
GROUP BY month

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM