2016-07-22 14 views
0

У меня есть таблица вроде этого:GROUP BY (а, Ь) и (Ь, а)

player1 player2 player3 player4 score1 score2 
    1   2   3   4   11   2 
    1   2   3   4   4   11 
    2   1   3   4   11   5 

Если я запрашиваю: SELECT player1, player2, SUM(score1) FROM mytable GROUP BY player1, player2

я получаю:

player1 player2 SUM(score1) 
    1   2   15 
    2   1   11 

Тем не менее, я хотел бы получить GROUP BY player1,player2 AND player2,player1 в то же время, чтобы получить:

player player SUM(score1) 
    1   2   26 

Кто-нибудь знает, если это возможно (я использую MySQL).

Если это не так, вы знаете, как это сделать на PHP?

+3

Нормализация Схему – Strawberry

+0

@Strawberry Может быть, моя таблица не Goo, да. Как вы думаете, я должен был сгруппировать своих игроков в другой таблице и иметь что-то вроде: group1, group2, score1, score2? –

ответ

0

Вы можете использовать least() и greatest():

select least(player1, player2), greatest(player1, player2), sum(score1) 
from mytable 
group by least(player1, player2), greatest(player1, player2); 
+0

Это прекрасно, я не знаю, почему я об этом не думал. :) –

+0

@Strawberry вы можете понизить по любой причине, которую хотите, до тех пор, пока вы не нацеливаете на какого-либо пользователя в частности (а вы нет). Мне интересно, почему вы почувствовали необходимость оставить комментарий, прежде чем делать, хотя – Lamak

+0

@Strawberry, я вижу, звучит прекрасно для меня. Во всяком случае, я думаю, что вы должны рассматривать каждый downvote тот же самый – Lamak

-1

или попробовать это

select min(player1) as player1,max(player2) as player2, sum(score1) as score1 from 
(
select player1, player2, SUM(score1) as score1 FROM mytable GROUP BY player1, player2 
) as t 
Смежные вопросы