Возьмем для примера эту таблицу ...

m_tid | m_tid2 | m_hteam_score | m_ateam_score
  2       5           69             30
  5       2           0               5

Я плохо умею делать столы на заказ, извините ...

Итак, давайте возьмем эти данные, теперь m_tid и m_tid2 - это столбцы для TID, которые находятся в отдельной таблице.

Теперь то, что я хочу сделать, это собрать счет для команды id2 (или команды id1) из всех оценок ... Как мне посчитать два столбца для определения того, находится ли команда на m_tid и {{X1} }

У меня нет запроса, но я бы все равно не знал, как бы я сделал запрос для этого. :(

Ожидаемые результаты будут примерно такими

  m_tid | m_tid_score | m_tid2 | m_tidscore2
    5         35          2           69
1
Cameron Swyft 21 Фев 2016 в 03:30

2 ответа

Лучший ответ

Если вы хотите получить общий балл для каждой команды, вот один из методов с использованием коррелированных подзапросов:

select t.*,
       (coalesce((select sum(s.m_hteam_score) from scores s where s.m_tid = t.tid), 0) +
        coalesce((select sum(s.m_ateam_score) from scores s where s.m_tid2 = t.tid), 0)
       ) as totalscore           
from teams t;
1
Gordon Linoff 21 Фев 2016 в 00:34

Вот еще один вариант использования conditional aggregation:

select o.id, sum(case when y.m_tid = o.id then y.m_hteam_score 
                 when y.m_tid2 = o.id then y.m_ateam_score
                 else 0 end) score
from othertable o 
    join yourtable y on o.id in (y.m_tid, y.m_tid2)
group by o.id
1
sgeddes 21 Фев 2016 в 00:43