簡體   English   中英

2個表的聯合的SQL查詢

[英]Sql query for union of 2 tables

我陷入了疑問。 我有兩個表,並且兩個表都有一個共同的列,但是兩個表中的數據可能不同:

標簽1

+---------+------------+
|   Sub   | student_id |
+---------+------------+
| Math    | 0033       |
| Science | 0034       |
| Geom    | 0035       |
| Math    | 0034       |
+---------+------------+

標簽2

+---------+----------+
|   Sub   | class_id |
+---------+----------+
| Science | 001      |
| Geom    | 002      |
| Geom    | 001      |
| Civics  | 004      |
+---------+----------+

現在,我需要通過以下方式獲得結果:

+---------+----------------+--------------+
|   Sub   | Student(count) | Class(count) |
+---------+----------------+--------------+
| Math    | 2              | 0            |
| Science | 1              | 1            |
| Geom    | 1              | 2            |
| Civics  | 0              | 1            |
+---------+----------------+--------------+

我想我必須使用union,並且可以在兩個不同的查詢中獲得結果,但是無法顯示上述最終表。

這就是我所擁有的:

select sub,count(*)as student_id from tab1
group by sub
union
select sub,count(*)as class_id from tab2
group by sub

但是我得到的是2列而不是3列。

任何幫助將不勝感激。

試試這個

SELECT AllSubs.Sub as Sub,
       COUNT(DISTINCT tab1.Student_Id) as "Student(Count)",
       COUNT(DISTINCT tab2.Class_Id) as "Class(Count)"
FROM
(SELECT DISTINCT Sub FROM tab1
UNION
SELECT DISTINCT Sub FROM tab2)AllSubs
LEFT JOIN tab1 ON tab1.Sub = AllSubs.Sub
LEFT JOIN tab2 ON tab2.Sub = AllSubs.Sub
GROUP BY AllSubs.Sub

sqlFiddle

該查詢從tab1和tab2中選擇所有不同的主題,然后與tab1和tab2左連接,然后計算不同的studdent_id並按主題對不同的class_id進行計數。

更新

SELECT AllSubs.Sub as Sub,
       COUNT(DISTINCT tab1.Student_Id) as "Student(Count)",
       COUNT(DISTINCT tab2.Class_Id) as "Class(Count)",
       COUNT(DISTINCT tab1.Student_Id) - COUNT(DISTINCT tab2.Class_Id) as difference
FROM
(SELECT DISTINCT Sub FROM tab1
UNION
SELECT DISTINCT Sub FROM tab2)AllSubs
LEFT JOIN tab1 ON tab1.Sub = AllSubs.Sub
LEFT JOIN tab2 ON tab2.Sub = AllSubs.Sub
GROUP BY AllSubs.Sub
ORDER BY difference DESC

sqlFiddle

如果只需要第一行,只需在查詢末尾添加LIMIT 1

暫無
暫無

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

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