2017-01-29 95 views
1

您好,我對關係數據庫和SQLite的世界相當陌生,但我正在嘗試在R Markdown中編輯和合並SQLite中的多個數據集,並且我想知道是否有任何讓每個變化永久化的方法。舉例來說,在我的第一個SELECT語句這裏永久保留SQLite中的更改

SELECT id, avg(days) Average 
FROM data1 
GROUP BY id 

再經過我有平均的專欄中,我想使用主鍵像下面從另一個數據集加入一列:

SELECT data1.*, data2.purchases 
FROM data1 
LEFT JOIN data2 
ON data1.id=data2.id 

但是我希望從第一組開始的改變是永久性的,並且在我試圖進一步改變表時進行應用。有什麼我做錯了嗎?這一切都在R markdown中的SQLite插入,所以我的語法也可能導致這種情況。任何幫助表示讚賞。

+0

「但是我希望從第一組開始的改變是永久性的,並在我試圖進一步改變表格時應用。」那是什麼意思? 「有什麼我做錯了嗎?」我不知道,你遇到什麼問題? – hobbs

+0

@hobbs對不起,我的語言很混亂。好的,所以我的第一個數據集有兩列,分別是id,然後是相應的日期。一些ID有一天以上的時間,所以我讓SQL打印了ID和日子的平均值。現在從這個新改變的數據集(帶有id和平均值的數據集)我想添加另一列。但是當我添加新列時,它會從原始數據集(帶有id和多天的那個)添加。 – Chioma

+0

data1和data2是同一個表還是兩個不同的表? – Psidom

回答

1

您可以重命名第一個選擇的結果(即A),然後將其與另一個表data2結合。通常你不想救你的數據庫,這會搞亂你的數據庫很快作出選擇:

嵌套選擇

SELECT A.*, data2.purchases 
FROM 
(
    SELECT id, avg(days) Average 
    FROM data1 
    GROUP BY id 
) A 
LEFT JOIN data2 
ON A.id = data2.id 

您可以創建一個臨時表,雖然,這是適用於當前連接到數據庫:

創建一個臨時表

CREATE TEMP TABLE A AS 
SELECT id, avg(days) Average 
FROM data1 
GROUP BY id 

然後你可以使用它作爲:

SELECT A.*, data2.purchases 
FROM A 
LEFT JOIN data2 
ON A.id=data2.id 

通常情況下,你將無法在數據庫中創建永久表,除非你是數據庫的維護,並有許可這樣做。

+0

謝謝你的迴應。這是否意味着任何時候我想添加一些東西到數據集中,我必須做一個嵌套的選擇?我還想對數據集執行大約4次以上的操作,我希望將它們全部組合到一個數據集中,並將其全部更改。 – Chioma

+0

我列出了上述兩個選項,您可以使用嵌套選擇,也可以爲每個操作創建一個臨時表,然後再引用它們。 – Psidom

+0

好吧,比如說第一次更改我創建臨時表A.然後第二次更改我調用臨時表A並創建臨時表B等等? – Chioma