2017-03-23 5 views
0

コンソールプラットフォームあたりのゲームセッションの割合を計算しようとしています。私は、2つの異なるセッション(テーブルはサマリーを持っており、コンソールごとにまとめたテーブル)からのデータに基づいて使用量を計算しています。それはうまくいく、私は合計nrまたはセッションをT3でSessionTotalに合計することができます。したがって、このコードはほとんど機能しますが、外部SELECTを検証することはできません。誰かが私を助けてくれますか? RDBMSは、使用している複数のテーブルからの合計に基づいてパーセントを計算するクエリ

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

? SQL Server、MySQL、PostGres、SQLLite? – SqlZim

答えて

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

ありがとう、それはそれをしました。私はそれが単純でなければならないことを知っていた、私はそれを理解できなかった。 – Teboda

関連する問題