2017-07-29 80 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,并使用相关子查询。根据您的数据,这些中的每一个都可以适用于不同的情况。