3 поля SUMS, но только когда есть значение - PullRequest
0 голосов
/ 27 января 2012

это, вероятно, будет легко. У меня есть столы

Игра:

guid(PK), puid, gScoreA, gTimesPlayed, gScoreB.

игрок:

puid(PK), pFname, pLname

Я пытаюсь:

Select 
    player.puid, 
    (SUM(game.gScoreA)/SUM(game.gTimesPlayed)) as skillA, 
    (SUM(game.gScoreB)/SUM(game.gTimesPlayed)) as skillB 
FROM 
    player, 
    game 
WHERE 
    player.puid = game.puid 
ORDER BY 
    skillA DESC, 
    skillB DESC

, поэтому за игру игрок может иметь либо gScoreA ИЛИ gScoreB и ВСЕГДА gTimesPlayed. Поэтому я хочу, чтобы все SUM(game.gScoreA) были поделены только на SUM(game.gTimesPlayed), где game.gScoreA имеет значение, а game.gScoreB - нет, и наоборот для SUM(game.gScoreB) / SUM(game.gTimesPlayed), ГДЕ gScoreA не имеет значения - как итог для каждого плеер в базе данных игроков ... дым и пар из моих ушей !!

1 Ответ

2 голосов
/ 27 января 2012
SELECT 
    player.puid, 
    SUM(game.gScoreA)/SUM(IF(game.gScoreA IS NOT NULL, game.gTimesPlayed, 0)) as skillA, 
    SUM(game.gScoreB)/SUM(IF(game.gScoreB IS NOT NULL, game.gTimesPlayed, 0)) as skillB 
FROM player INNER JOIN game ON player.puid = game.puid 
GROUP BY player.puid
ORDER BY 
    skillA DESC, 
    skillB DESC

Используйте GROUP BY, чтобы получить результат для каждого игрока.

Также используйте синтаксис JOIN вместо соединений в стиле запятой.

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