2015-08-18 36 views
0

我試圖顯示網站用戶數據的「比例」字段,其中比例將是衡量某個數據源對其轉換貢獻多少的比例無論這可能是什麼,它是無關緊要的)。SQL - 以另一個字段的頻率除以比例輸出的字段

這是一種輸出我希望能實現與SQL的:

Month | ID | Country | Data Source |Proportion 
Jan-15 | 1 | UK  | GA  | 0.5 
Jan-15 | 1 | UK  | Omniture | 0.5 
Jan-15 | 2 | France | GA  |  1 
Jan-15 | 3 | Germany | GA  | 0.25 
Jan-15 | 3 | Germany | Omniture | 0.25 
Jan-15 | 3 | Germany | Email  | 0.25 
Jan-15 | 3 | Germany | Moz  | 0.25 
Feb-15 | 1 | UK  | GA  | 0.5 
Feb-15 | 1 | UK  | Omniture | 0.5 
Feb-15 | 2 | France | Omniture | 0.5 
Feb-15 | 2 | France | GA  | 0.5 
Feb-15 | 3 | Germany | Omniture | 0.33 
Feb-15 | 3 | Germany | Email  | 0.33 
Feb-15 | 3 | Germany | Moz  | 0.33 
Mar-15 | 1 | UK  | Omniture | 0.5 
Mar-15 | 1 | UK  | GA  | 0.5 
Mar-15 | 2 | France | Omniture | 0.5 
Mar-15 | 2 | France | Email  | 0.5 

這就是我目前的工作,並與失敗的SQL:

SELECT 
    MONTH(registrationDate), country, DataSource, 1/COUNT(ID) 
FROM 
    data_table 
WHERE 
    registrationDate IS NOT NULL 
GROUP BY 
    MONTH(registrationDate), ID 

這只是給出一個比例的例子。使用上面的示例,1月份ID爲1的用戶只有一個記錄,其比例= 0.5。

任何幫助顯示數據源之間正確共享這個比例值將不勝感激!

+1

請編輯您的問題,並提供樣品* *數據(ID列混淆)。另外,用你真正使用的數據庫標記問題。 –

+0

對不起,我之前沒有看到此評論 - 我如何使用我正在使用的數據庫進行標記?對此很新... –

回答

1

您需要將結果與原始數據結合使用。下面是使用JOIN的方法:

SELECT dt.*, ddt.value 
FROM data_table dt JOIN 
    (SELECT MONTH(registrationDate) as mon, ID, 
      1.0/COUNT(applicantId) as value 
     FROM data_table 
     WHERE registrationDate IS NOT NULL 
     GROUP BY MONTH(registrationDate), ID 
    ) ddt 
    ON ddt.id = dt.id AND 
     ddt.mon = MONTH(dt.registrationDate); 

你的問題已經IDApplicationIdRegistrationId灑貫穿始終。我不確定要使用哪個正確的列。

編輯:

要包含一年(這真的是在所有情況下是個好主意):

SELECT dt.*, ddt.value 
FROM data_table dt JOIN 
    (SELECT YEAR(registrationDate) as yyyy, MONTH(registrationDate) as mon, ID, 
      1.0/COUNT(applicantId) as value 
     FROM data_table 
     WHERE registrationDate IS NOT NULL 
     GROUP BY YEAR(registrationDate), MONTH(registrationDate), ID 
    ) ddt 
    ON ddt.id = dt.id AND 
     ddt.mon = MONTH(dt.registrationDate) AND 
     ddt.yyyy = YEAR(dt.registrationDate); 
+0

乾杯!那很棒。是的,這是我的sl - - 他們都應該是相同的ID –

+0

嘿再次戈登。自從我在這裏意識到這裏有多年的時間,我的數據集包含按月份分組的信息,無論年份如何,都可以分享信用額度......有沒有一種方法可以按月份和年份一起加入和分組,而無需使用整個日期值?所以上面我們有MONTH(registrationDate) - 有沒有可以使用的MONTHYEAR(registrationDate)類型的函數?謝謝 –

相關問題