簡體   English   中英

替代加入只留下一個“表掃描”

[英]Substitute join to leave only one 'Table Scan'

我有財務數據。 並想計算股東權益。 這基本上是它的樣子: 在此處輸入圖像描述

我有以下有效的查詢:

SELECT a.Ticker, a.Value - l.Value as 'ShareholdersEquity'
FROM FinData a 
JOIN FinData l 
ON a.Ticker = l.Ticker AND a.Date = l.Date 
WHERE a.Type = 'assets' 
AND l.Type = 'liabilities'

但是對於一個有很多記錄的表,這會很慢,因為當我用 Explain 檢查查詢時(我使用 Azure Data Studio),它會進行 2 次表掃描,這意味着更多的時間。 我怎樣才能重寫它更快?

您可以嘗試條件聚合而不是自連接:

select ticker, date, 
    sum(case when type = 'asset' then value else - value end) as ShareholdersEquity
from findata
where type in ('asset', 'liabilities')
group by ticker, date

暫無
暫無

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

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