0

SQL Server の特定の ID を持つ特定の列に対して実行された操作の結果を表示するテーブルを選択しようとしています。

EventLogテーブルには、さまざまなEventIdゲーム イベント (17 = 死亡、21 = キル) を表すさまざまな が含まれています。Death イベントの FloatResult 列の SUM と AVG、および kill イベントの合計レコード数を取得して、それらをテーブルとクラス タイプに表示しようとしています。

select 
    e.Class, a.TotalLifetime, a.AverageLifetime, b.TotalKills
from 
    EventLog e 
join 
    (select 
         e1.Class, 
         SUM(e1.FloatResult) as TotalLifetime, 
         AVG(e1.FloatResult) as AverageLifetime
     from 
         EventLog e1
     join 
         Maps m on e1.MapId = m.Id
     where 
         e1.EventId = 17 and
         m.MapName like '%my_map' and 
         e1.EventTime >= '2013-07-04' and
         e1.EventTime <= DATEADD(d, 1, '2013-07-05')
     group by 
         e1.Class) as a on e.Class = a.Class
join (
    select e2.Class, count(*) as TotalKills
    from EventLog e2 
    join Maps m on e2.MapId = m.Id
    where e2.EventId = 21 and
    m.MapName like '%my_map' and 
        e2.EventTime >= '2013-07-04' and
        e2.EventTime <= DATEADD(d, 1, '2013-07-05')
    group by e2.Class
) as b on e.Class = b.Class
group by e.Class

理想的な結果は次のようになります。

Class  TotalLifeTime AverageLifetime TotalKills
0      563.45        30.5            100
1      766.6         12.56           20
etc...

これにより、SQL Server は次のように言います。

エラー行 1: 列 'a.TotalLifetime' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

ただし、この値でグループ化するのではなく、クラスでのみグループ化します。

このクエリを作成するより良い方法はありますか?

4

1 に答える 1