Объедините несколько строк в один в mysql - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть такая таблица, и мне нужно объединить их все в строку 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 |
+-------+-----+-----+-----+-----+-------+

1 Ответ

1 голос
/ 02 февраля 2020

Вот как вы должны использовать 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   |
...