[英]Select difference between two tables
我看到提供的代碼使用UNION
來實現輸出。 使用某種JOIN
可以更好地實現這一點。
其結果是行的總數table_a
由分組date
從行的總數目中減去table_b
由分組date
。
這段代碼未經測試,但應該很好地說明如何實現這一點:
SELECT a.date,
a.hour,
ISNULL(b.daily, 0) AS daily,
a.hour - ISNULL(b.daily) AS difference
FROM (
SELECT date,
COUNT(*) AS hour
FROM table_a
GROUP BY date
) a
LEFT JOIN (
SELECT date,
COUNT(*) AS daily
FROM table_b
GROUP BY date
) b ON b.date = a.date
ORDER BY a.date;
這通過以下方式工作:
table_a
每個日期的計數。table_b
每個日期的計數。table_a
所有結果與table_a
中匹配的結果連接table_b
。date
、來自table_a
的hour
來自table_a
的daily
(如果為NULL
table_b
0)以及兩者之間的差異。筆記:
table a
和table b
重命名為table_a
和table_b
。 我認為這些不是實際的表名date
列的結果,則INNER JOIN
可能更可取。 無論table_b
是否有條目,使用LEFT JOIN
都將返回table_a
所有結果。date
是一個允許的列名,但我已經按照 OP 給出的示例在代碼中復制了它。你的方法沒問題。 您的group by
列不正確:
Select date, sum(hourly) as hourly, sum(daily) as daily,
sum(hourly) - sum(daily) as diff
from ((select date, count(*) as hourly, 0 as daily
from table a
group by date
) union all
(select date, 0 as hourly, count(*) as daily
from table b
group by date
)
) ab
group by date;
關鍵思想是外部查詢僅按date
聚合——而且您仍然需要那里的聚合函數。
您的子查詢中還有其他錯誤,例如缺少group by
s 和date
列。 我假設那些是轉錄錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.