基于多个表的总和计算百分比的SQL查询
我试图计算每个控制台平台的游戏会话的百分比。我正在根据两个不同sessess表中的数据计算使用率(一个只有摘要,另一个是每个控制台的汇总)。这是可行的,我可以将总nr或会话合计到T3的SessionTotal中。因此,这段代码几乎可以工作,只是似乎无法让外部选择进行验证。有人能帮我吗基于多个表的总和计算百分比的SQL查询,sql,select,join,group-by,Sql,Select,Join,Group By,我试图计算每个控制台平台的游戏会话的百分比。我正在根据两个不同sessess表中的数据计算使用率(一个只有摘要,另一个是每个控制台的汇总)。这是可行的,我可以将总nr或会话合计到T3的SessionTotal中。因此,这段代码几乎可以工作,只是似乎无法让外部选择进行验证。有人能帮我吗 SELECT T3.Sessions, T3.Console, T3.Sessions * 100 / T2.SessionTotal AS Percentage FROM ( -- This call
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
)
您正在使用哪些RDBMS?Sql Server、MySql、PostGres、Sql lite?非常感谢,就这样。我知道这应该很简单,我就是想不出来。
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