SQL суммировать два столбца и сложить оба - PullRequest
0 голосов
/ 25 января 2019

У меня есть база данных с множеством матчей по настольному теннису.Чтобы составить рейтинг, мне нужно сосчитать несколько столбцов.

Я хочу сложить уникальные раунды, чтобы узнать, как часто люди участвовали.И я также хочу сложить все выигрышные игры.Иногда мы играем в «супер раунд» (SR), где выигрышные игры удваиваются.По умолчанию для SR установлено значение 1.

Чтобы узнать общую оценку, я хочу сложить оба результата (участие и итоговые игры).

Что у меня сейчас:

$sql_user = $conn->query("
SELECT user_id, count(distinct round) as participation, 
sum(IFNULL(GAMES_WIN,0) * SR) AS total_games 
FROM tt_game group by user_id ORDER BY user_id ASC");

Можно ли сделать что-то вроде:

$sql_user = $conn->query("
SELECT user_id, count(distinct round) as participation, 
sum(IFNULL(GAMES_WIN,0) * SR) AS total_games 
sum(participation + total_games) AS total_score
FROM tt_game group by user_id ORDER BY total_score DESC");

И как мне повторить эти результаты?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 25 января 2019

А как насчет другого выбора?

Я думаю, что вам нужен еще один выбор, где вы рассчитываете total_score.

Попробуйте что-то вроде этого:

$sql_user = $conn->query("
SELECT t.user_id, t.participation, t.total_games, (participation + total_games) AS total_score
FROM (SELECT user_id, count(distinct round) as participation, sum(IFNULL(GAMES_WIN, 0) * SR) AS total_games
      FROM tt_game
      group by user_id
      ORDER BY total_score DESC) AS t
");
0 голосов
/ 25 января 2019

Нет, вы не можете ссылаться на псевдонимы, определенные в предложении SELECT в самом предложении SELECT.

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

SELECT
  user_id,
  count(distinct round) as participation, 
  sum(IFNULL(GAMES_WIN,0) * SR) AS total_games, 
  count(distinct round) + sum(IFNULL(GAMES_WIN,0) * SR) AS total_score
FROM tt_game 
GROUP BY user_id
ORDER BY total_score DESC;

Или использоватьподзапрос:

SELECT user_id, participation, total_games, participation + total_game AS total_score
FROM
(
  SELECT
    user_id,
    count(distinct round) as participation, 
    sum(IFNULL(GAMES_WIN,0) * SR) AS total_games
  FROM tt_game 
  GROUP BY user_id
) aggregated
ORDER BY total_score DESC;
...