Mysql SQL sum按相同标识符在两个不同列中分组的字段
该表有4列比赛,赢家ID,输家ID,数量分数交换。我想在一个查询中显示每个球员在所有比赛中赢得和赢得的总分数 这是桌子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
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 |
+------+----------+-----------+