2015-09-19 3 views
2

У меня возникли проблемы с записью запроса, который суммирует возникновение всех значений в 2 столбцах. У меня есть таблица со следующей структурой:Количество нескольких столбцов

+-----------+------------+ 
| player1ID | player2ID | 
+-----------+------------+ 
| 1   | 2   | 
| 1   | 3   | 
| 2   | 3   | 
| 1   | 4   | 
+-----------+------------+ 

После выполнения запроса я хочу результат таблицу, как это:

+-----------+------------+ 
| playerID | count  | 
+-----------+------------+ 
| 1   | 3   | 
| 2   | 2   | 
| 3   | 2   | 
| 4   | 1   | 
+-----------+------------+ 

Я попытался следующий запрос

select g1.player1ID, g1.count1 + g2.count2 
from 
    (select player1ID, count(*) from table group by player1ID) as g1, 
    (select player2ID, count(*) from table group by player2ID) as g2 
where player1ID = player2ID 

но что дает только счет, если игрок встречается в обоих столбцах (player1ID & player2ID), но не появляется, если это происходит только в том или ином.

ответ

4

Вы можете использовать union в производной таблице, как это:

select player, count(*) as count 
from (
    select player1id player from table1 
    union all 
    select player2id player from table1 
) sub 
group by player; 

Sample SQL Fiddle

+1

, который работает отлично! спасибо, кажется, сейчас так просто, будет отмечен как ответ – beerye

0

Используйте union all для объединения двух столбцов. Затем сделайте агрегацию:

select playerID, count(*) 
from ((select player1ID as playerID from table) union all 
     (select player2ID as playerID from table) 
    ) t 
group by playerID; 
Смежные вопросы