MySQL объединяет столбцы и считает значения в одной таблице - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть следующая таблица

| id | p1_name | p1_score | p2_name | p2_score |
------------------------------------------------
|  1 | aaa     | 2        | bbb     | 3        |
|  1 | ccc     | 1        | ddd     | 7        |
|  1 | ddd     | 5        | aaa     | 8        |

Мне нужно посчитать все оценки для всех игроков и отобразить их в более простой форме, например:

| name | score |
----------------
| aaa  |  10   |
| bbb  |   3   |
| ccc  |   1   |
| ddd  |  12   |

Что бысинтаксис SQL для достижения этого?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Использование Union All с группировкой:

select q.name , sum(q.score) as score
  from
    (
    select p1_name as name, p1_score as score
      from tab
    union all 
    select p2_name as name, p2_score
      from tab
    ) q
group by q.name;  

Rextester Demo

0 голосов
/ 10 декабря 2018

Мы можем использовать UNION ALL, чтобы объединить имена в один столбец с соответствующими им значениями баллов.Теперь мы можем использовать этот набор результатов в качестве производной таблицы и GROUP BY на name и получить SUM() оценок.

SELECT 
  dt.name, 
  SUM(dt.score) AS score
FROM 
(
  SELECT
    p1_name AS name, 
    p1_score AS score
  FROM your_table
  UNION ALL
  SELECT
    p2_name AS name, 
    p2_score AS score
  FROM your_table
) AS dt
GROUP BY dt.name 

Результат

| name | score |
| ---- | ----- |
| aaa  | 10    |
| bbb  | 3     |
| ccc  | 1     |
| ddd  | 12    |

Посмотреть на БД Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...