2017-07-29 23 views
0

我們有數據爲系統遵循PostgreSQL的 - 對彙總數據最好的方法

用戶數據 體驗 教育 求職

該數據將跨應用程序使用,很少有邏輯也重視這些數據。 爲了確保這些數據在整個應用程序中保持一致,我認爲可以創建View並獲取這些數據的計數,然後在不同的地方使用此視圖。

現在的問題是,作爲詳細信息表沒有與對方的關係,我應該如何創建視圖

  • 爲每個表的不同視圖,然後通過
  • 使用組創建一個視圖,寫子查詢以獲取這些數據

從性能角度來看,哪一個是最好的方法?

例如,

SELECT 
    UserId, 
    COUNT(*) AS ExperienceCount, 
    0 AS EducationCount 
FROM User 
INNER JOIN Experience ON user_id = User_Id 
GROUP BY 
    UserId 
UNION ALL 
SELECT 
    UserId, 
    0, 
    COUNT(*) 
FROM User 
INNER JOIN Education ON user_id = user_id 
GROUP BY 
    UserId 

然後按此組合得到每個用戶一行中所有這些數據的摘要。寫出您指定很可能是查詢

+3

如果您想了解兩種不同方法的性能,請嘗試使用它們處理系統上的數據。如果您有特定的問題,至少應該在問題中包含這些查詢。 –

+0

感謝您的快速響應,實際上截至目前我還沒有足夠的數據來測試這一點,所以只是想檢查一下。好的,我會在這裏包含相同的查詢 –

回答

0

方式一:

SELECT UserId, SUM(ExperienceCount), SUM(EducationCount 
FROM ((SELECT UserId, COUNT(*) as ExperienceCount, 0 AS EducationCount 
     FROM Experience 
     GROUP BY UserId 
    ) UNION ALL 
     (SELECT UserId, 0, COUNT(*) 
     GROUP BY UserId 
    ) 
    ) u 
GROUP BY UserId; 

這也可以寫成一個FULL JOINLEFT JOIN,並使用相關子查詢。根據您的數據,這些中的每一個都可以適用於不同的情況。