1

该表有 4 列 Match、Winning_Player_ID、Losing_Player_ID、Quantity_Points_Exchanged_for_that_match。我想在一个查询中显示每个玩家在所有比赛中赢得和获得的总积分。

这是桌子

M WIN LOSE QTY  
1 100 201 10  
2 201 100 05  
3 100 201 05  
4 302 100 05  

对于输出,我希望以这种方式在单个查询中对其进行总计,但无法弄清楚。

ID WIN LOSE
100 15 10
201 05 15
302 05 00
4

3 回答 3

1
SELECT p.player ID,
       (SELECT SUM(QTY) FROM tbl WHERE WIN = p.player) WIN,
       (SELECT SUM(QTY) FROM tbl WHERE LOSE = p.player) LOSE
FROM
    (SELECT DISTINCT WIN player FROM tbl
    UNION
    SELECT DISTINCT LOSE FROM tbl) p
于 2012-05-18T00:27:51.717 回答
1

没有数据库可用于检查这一点,但可能是这样的:

SELECT player, SUM(winQty) AS WIN, SUM(loseQty) AS LOSE
  FROM ( SELECT win AS player, qty AS winQty, 0 AS loseQty
           FROM myTable
         UNION ALL
         SELECT lose AS player, 0 AS winQty, qty AS loseQty
           FROM myTable
       ) x
  GROUP BY player

更新:将 UNION 更改为 UNION ALL

于 2012-05-18T00:35:29.273 回答
0

这是答案:

创建表:

CREATE TABLE table_name (
  m int,
  win int,
  lose int,
  qty int);

插入数据:

INSERT INTO table_name (m, win, lose, qty)
values 
(1, 100, 201, 10),
(2, 201, 100, 05),
(3, 100, 201, 05),
(4, 302, 100, 05);

查询:

SELECT id, sum(won), sum(lost) from (
    SELECT win as id, SUM(qty) as won, 0 as lost 
    FROM table_name W GROUP BY win
  UNION
    SELECT lose as id, 0 as won, SUM(qty) as lost
    FROM table_name W GROUP BY lose
  ) sums
GROUP BY ID 

结果:

+------+----------+-----------+
| id   | sum(won) | sum(lost) |
+------+----------+-----------+
|  100 |       15 |        10 |
|  201 |        5 |        15 |
|  302 |        5 |         0 |
+------+----------+-----------+
于 2012-05-18T02:06:18.107 回答