0

各プレイヤーのすべてのポイント (hiscore) の合計を計算する必要があります。

今のところ、プレーヤー 1 またはプレーヤー 2 のいずれかを合計できます。たとえば、カテゴリ 7 ではプレーヤー 1 がトムであり、カテゴリ 5 ではプレーヤー 2 もトムです。結果は、Tom = 2+10 = 12 ポイントになります。

SELECT SUM(subpoints) AS hiscore, player1_id, player2_id, FROM (
    SELECT COUNT(current_record)*2 AS subpoints, player1_id, player2_id FROM db WHERE category_id IN (7,8) GROUP BY player1_id
       UNION ALL
    SELECT COUNT(current_record)*10 AS subpoints, player1_id, player2_id FROM db WHERE category_id IN (1,2,3,4,5,6) GROUP BY player1_id
) AS hi
GROUP BY player1_id

サンプルテーブル:

 category_id | player1 | player2 | subpoints |
-------------+---------+---------+-----------+
           7 |   Tom   |  Mike   |     2     |
           5 |  Peter  |  Tom    |    10     |
----------------------------------------------

最終結果は次のようになります。

  Player | hiscore |
  -------+---------+
  Tom    |   12    |
  Mike   |    2    |
  Peter  |   10    |
4

1 に答える 1

1

最初に列のピボットを解除してから集計できます。

select player, sum(subpoints) hiscore
from
(
  select category_id, player1 player, subpoints
  from db
  union all
  select category_id, player2 player, subpoints
  from db
) d
group by player;

SQL Fiddle with Demoを参照してください。

元のクエリをこれに統合すると、コードは次のようになります。

select player, sum(subpoints) hiscore
from
(
  SELECT COUNT(current_record)*2 AS subpoints, player1_id as player
  FROM db 
  WHERE category_id IN (7,8) 
  GROUP BY player1_id
  UNION ALL
  SELECT COUNT(current_record)*10 AS subpoints, player2_id as player
  FROM db 
  WHERE category_id IN (1,2,3,4,5,6) 
  GROUP BY player2_id
) d
group by player
于 2013-05-09T14:13:46.530 に答える