2017-03-23 2 views
0

Ich versuche, einen prozentualen Anteil an Spielsitzungen pro Konsolenplattform zu berechnen. Ich berechne die Verwendung basierend auf Daten aus zwei verschiedenen Sessions-Tabellen (eine, die nur eine Zusammenfassung hat und eine, die ich pro Konsole zusammenfasse). Das funktioniert, und ich kann die Summe nr oder Sitzungen in SessionTotal in T3 zusammenfassen. So funktioniert dieser Code fast, scheint nur nicht die äußere SELECT zu validieren. Könnte mir jemand helfen?SQL-Abfrage zum Berechnen von Prozentsätzen basierend auf Summen aus mehreren Tabellen

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

die RDBMS verwenden Sie? SQL-Server, MySql, PostGres, sql lite? – SqlZim

Antwort

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 
+0

Vielen Dank, das hat es getan. Ich wusste, dass es einfach sein sollte, ich konnte es einfach nicht herausfinden. – Teboda

Verwandte Themen