MYSQL СУММА ДВЕ КОЛОННЫ - PullRequest
       15

MYSQL СУММА ДВЕ КОЛОННЫ

1 голос
/ 03 апреля 2020

У меня такая ситуация:

SELECT uf.*, SUM(uto.points) AS total_points_live, 
             SUM(utl.points) AS total_points_online,
             (total_points_live + total_points_online) AS total_points
FROM users AS uf    
            LEFT JOIN users_tourney_online AS uto
                ON uto.id_users = uf.id 
            LEFT JOIN users_tourney_live AS utl
                ON utl.id_users = uf.id
GROUP BY uf.id ORDER BY total_points DESC

Но не работает, потому что псевдонимы использовать нельзя.

Вы можете мне помочь?

С уважением,

1 Ответ

3 голосов
/ 03 апреля 2020

Вы не можете использовать псевдоним, определенный в том же предложении SELECT, в котором он определен.

Вам потребуется повторить выражение:

SUM(uto.points) + SUM(utl.points) AS total_points

Если SUM s может be NULL:

COALESCE(SUM(uto.points), 0) + COALESCE(SUM(utl.points), 0) AS total_points

В качестве альтернативы вы можете использовать подзапрос:

SELECT t.*, coalesce(total_points_live, 0) + coalesce(total_points_online, 0) total_points
FROM (
    SELECT uf.*, SUM(uto.points) AS total_points_live, SUM(utl.points) AS total_points_online
    FROM ...
    GROUP BY uf.id
) t
ORDER BY total_points desc

Не связанные примечания: GROUP BY и SELECT * не go вместе хорошо; Хорошей практикой является перечисление всех неагрегированных столбцов в предложении GROUP BY (хотя MySQL несколько слабоват).

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