Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL sum按相同标识符在两个不同列中分组的字段_Mysql_Sql - Fatal编程技术网

Mysql SQL sum按相同标识符在两个不同列中分组的字段

Mysql SQL sum按相同标识符在两个不同列中分组的字段,mysql,sql,Mysql,Sql,该表有4列比赛,赢家ID,输家ID,数量分数交换。我想在一个查询中显示每个球员在所有比赛中赢得和赢得的总分数 这是桌子 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 没有可用的db来检查这一点,但可能是这样的: SELECT player, S

该表有4列比赛,赢家ID,输家ID,数量分数交换。我想在一个查询中显示每个球员在所有比赛中赢得和赢得的总分数

这是桌子

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

没有可用的db来检查这一点,但可能是这样的:

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

以下是答案:

创建表:

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 |
+------+----------+-----------+

这个SQL不起作用。数量来自哪里?FROM子句只有一列为player的表。此SQL。该表有QTY列。但是,性能完全是另一回事。这是有效的,而且非常缓慢。最后,我将每条记录转换成两条记录,一条为开,另一条为输。最后,我将每条记录转换成两条记录,一条为赢,另一条为输,并将赢或输存储在名为结果的字段中。SQL如下所示:按id从游戏组中选择id、SUMIFresult='win',quantity、0作为赢、SUMIFresult='lose',quantity、0作为输;如果外部连接是指完全外部连接,那么MySQL不支持它。此外,在支持完全外部联接的数据库(例如SQL Server)上,这将不起作用。即使它在另一个数据库平台上也能正常运行——我忘了MySQL不支持完全外部联接。让我重新考虑一下。现在它几乎与另一个答案相同。我没有看其他答案。凯文·贝德尔:我不是OP。我指出,还有一个答案与此类似,击键次数更少
+------+----------+-----------+
| id   | sum(won) | sum(lost) |
+------+----------+-----------+
|  100 |       15 |        10 |
|  201 |        5 |        15 |
|  302 |        5 |         0 |
+------+----------+-----------+