[英]Inner Join AND Left Join in Same Query?? (mySQL)
我目前有一個查詢選擇/顯示我想要的結果; 但是,其中一列不是我想要顯示的格式,因為我選擇的代碼僅在從另一個表完成連接時才會在結果圖表中轉換。
但是,我的查詢中已經有一個 LEFT Join,所以當我嘗試從一個單獨的表進行額外的連接時,我的查詢不起作用。 有誰知道這是否可能/如何保留我現有的查詢但添加一個額外的連接。
這是我當前的查詢和結果:
Select a.ye, a.AppsCreated, ((a.AppsCreated- b.AppsCreated)/b.AppsCreated) as "% Change" from(
select count(*) as "AppsCreated" , cycle_id as ye
from applications
group by cycle_id
)a
left join
(
select cycle_id as ye, count(*) as "AppsCreated"
from applications
group by cycle_id
)b
on a.ye -1 = b.ye
和結果
葉 | 創建的應用程序 | % 改變 |
---|---|---|
1 | 3000 | .00 |
2 | 4000 | .33 |
3 | 5000 | .25 |
4 | 3002 | .39 |
5 | 4005 | .33 |
6 | 3008 | .33 |
我正在嘗試將“ye”(即現有“應用程序”表中的 cycle_id)與單獨“周期”表中的“id”連接起來)
在一個單獨的查詢中,我將其作為 (INNER JOIN Cycles ONcycles.id = applications.cycle_id)
這會將“ye”行從 1、2、3 等變為與周期表中匹配的物理年時間范圍。
對不起,如果這一切都很復雜,但如果有人知道如何保留我現有的查詢但允許表加入以顯示相應的 ID 值,我將不勝感激。
謝謝!!
首先,您可以使用lag()
來表達您的查詢,假設您的所有行都有一個cycle_id - 1
:
select cycle_id, count(*) as cnt,
lag(count(*)) over (order by cycle_id) as prev_cnt,
(-1 + (count(*) / lag(count(*)) over (order by cycle_id))) as ratio_change
from applications a
group by cycle_id;
(注意:即使有間隙,您仍然可以使用 window 函數,但您的樣本數據沒有間隙。)
我猜這也會簡化join
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.