SQL Query根据多个表

时间:2017-03-23 13:02:57

标签: sql select join group-by

我试图计算每个控制台平台的游戏会话百分比。我根据来自两个不同的sesssions-tables(一个只有一个摘要和一个我总结每个控制台的数据)的数据来计算使用量。这是有效的,我可以在T3中将总nr或会话总和为SessionTotal。所以这段代码几乎可以工作,但似乎无法让外部SELECT进行验证。有人可以帮助我吗?

SELECT T3.Sessions, T3.Console, T3.Sessions * 100 /  T2.SessionTotal AS Percentage
FROM
(
    -- This call returns a total nr of sessions played
    SELECT        SUM(Sessions) as SessionTotal 
    FROM

    (SELECT        Sessions, Console, SystemID
    FROM            (SELECT        TOP (100) PERCENT ISNULL(MIN(ps.SessionCount), 0) + ISNULL(COUNT(s.system_id), 0) AS Sessions, MIN(c.name) AS Console, MIN(c.id) AS SystemID
                      FROM            dbo.[Systems] AS c LEFT OUTER JOIN
                                                dbo.Sessions AS s ON c.id = s.system_id LEFT OUTER JOIN
                                                dbo.PreviousSessions AS ps ON c.id = ps.SystemID
                      GROUP BY c.id) AS T1) as T2,                                                
    -- This call returns nr of sessions per system
    SELECT        Sessions, Console, SystemID
    FROM            (SELECT        TOP (100) PERCENT ISNULL(MIN(ps.SessionCount), 0) + ISNULL(COUNT(s.system_id), 0) AS Sessions, MIN(c.name) AS Console, MIN(c.id) AS SystemID
                      FROM            dbo.[Systems] AS c LEFT OUTER JOIN
                                                dbo.Sessions AS s ON c.id = s.system_id LEFT OUTER JOIN
                                                dbo.PreviousSessions AS ps ON c.id = ps.SystemID
                      GROUP BY c.id) AS T3
)

1 个答案:

答案 0 :(得分:0)

declare @SessionTotal float = 

(

    SELECT        SUM(Sessions) as SessionTotal 
    FROM

    (SELECT        Sessions, Console, SystemID
    FROM            (
                     SELECT TOP (100) PERCENT ISNULL(MIN(ps.SessionCount), 0) + ISNULL(COUNT(s.system_id), 0) AS Sessions, MIN(c.name) AS Console, MIN(c.id) AS SystemID
                      FROM  dbo.[Systems] AS c 
                      LEFT OUTER JOIN dbo.Sessions AS s 
                      ON c.id = s.system_id 
                      LEFT OUTER JOIN dbo.PreviousSessions AS ps 
                      ON c.id = ps.SystemID
                      GROUP BY c.id) AS T1
                      ) as T2 

)   

    SELECT        Sessions, Console,Sessions * 100/@SessionTotal AS Percentage
    FROM            (

                      SELECT TOP (100) PERCENT ISNULL(MIN(ps.SessionCount), 0) + ISNULL(COUNT(s.system_id), 0) AS Sessions, MIN(c.name) AS Console, MIN(c.id) AS SystemID
                      FROM  dbo.[Systems] AS c 
                      LEFT OUTER JOIN dbo.Sessions AS s 
                      ON c.id = s.system_id 
                      LEFT OUTER JOIN dbo.PreviousSessions AS ps 
                      ON c.id = ps.SystemID
                      GROUP BY c.id
                     ) AS T3