繁体   English   中英

在mysql中将多行合并为一

[英]Combine multiple rows into one in mysql

我有一个这样的表,我需要使用 sum 将它们全部组合成一个distinct行。

+-------+-----+------+------+------+-------+
| users | ref | add  | sub  | mul  | marks |
+-------+-----+------+------+------+-------+
| u1    |  20 | 4521 |      |      |    20 |
| u1    |  20 | 4522 |      |      |    80 |
| u1    |  20 | 4523 |      |      |    60 |
| u1    |  20 |      | 8565 |      |    70 |
| u1    |  20 |      | 8566 |      |    30 |
| u1    |  20 |      |      | 5135 |    10 |
| u2    |  15 | 4521 |      |      |    20 |
| u2    |  15 | 4522 |      |      |    20 |
| u2    |  15 |      | 6253 |      |    30 |
| u3    |  20 | 5236 |      |      |    40 |
| u3    |  20 |      | 4523 |      |    50 |
| u3    |  20 |      | 4524 |      |     5 |
| u3    |  20 |      | 4525 |      |    30 |
| u3    |  20 |      |      | 5135 |    20 |
+-------+-----+------+------+------+-------+

像这样的东西。 是否可以? 我尝试了group by并没有得到这个结果。

+-------+-----+-----+-----+-----+-------+
| users | ref | add | sub | mul | total |
+-------+-----+-----+-----+-----+-------+
| u1    |  20 |   3 |   2 | 1   |   270 |
| u2    |  15 |   2 |   1 | n/a |    70 |
| u3    |  20 |   1 |   3 | 1   |   145 |
+-------+-----+-----+-----+-----+-------+

这是您应该如何使用group by进行聚合:

select users, ref,
  count(`add`) `add`,
  count(sub) sub,
  count(mul) mul,
  sum(marks) total
from tablename
group by users, ref

请参阅演示
结果:

| users | ref | add | sub | mul | total |
| ----- | --- | --- | --- | --- | ----- |
| u1    | 20  | 3   | 2   | 1   | 270   |
| u2    | 15  | 2   | 1   | 0   | 70    |
| u3    | 20  | 1   | 3   | 1   | 145   |

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM