сгруппировать по + дано и получил голоса в том же выводе - PullRequest
1 голос
/ 03 июня 2011

У меня есть таблица с голосами, в которой данные записываются в следующем формате:

id_user|id_user2|value
1|2|-1
1|3|1
5|3|1
2|1|-1

id_user - пользователь, проголосовавший, id_user2 - пользователь, получивший голос, а значение представляет, получил ли он положительный или отрицательный голос. Ну, и моя проблема в том, что я хотел бы показать, как стоит каждый пользователь отдавать и получать голоса при одном и том же выводе. Ниже показано, как я хотел бы, чтобы вывод сверху выглядел так:

id_user|given|gotten
1|0|-1
2|-1|-1
3|0|2
5|1|0

Я не знаю, как это сделать, я просто знаю, как я могу показать это с помощью двух отдельных запросов. В этом случае это будет:

SELECT id_user2,SUM(value) FROM `table` GROUP BY id_user2

и

SELECT id_user,SUM(value) FROM `table` GROUP BY id_user

1 Ответ

1 голос
/ 03 июня 2011

Просто присоединитесь к запросам:

SELECT
  gotten.id_user,
  gotten.gotten,
  given.given
FROM
(
  SELECT
    id_user2   AS id_user,
    SUM(value) AS gotten
  FROM
    table
  GROUP BY
    id_user2
) gotten
JOIN -- Join the current row with rows verifying...
(
  SELECT
    id_user,
    SUM(value) AS given
  FROM
    table
  GROUP BY
    id_user
) given ON given.id_user =  gotten.id_user -- ... this is the same user.

Примечание: если пользователь не дал или не получил голоса, он ничего не вернет за него.Если вам нужен результат для этих случаев, используйте полное внешнее объединение для объединения, даже если в левой или правой таблице нет строк, соответствующих вашему условию.

SELECT
  gotten.id_user,
  gotten.gotten,
  given.given
FROM
(
  SELECT
    id_user2   AS id_user,
    SUM(value) AS gotten
  FROM
    table
  GROUP BY
    id_user2
) gotten
FULL OUTER JOIN -- Join the current row with rows verifying...
(
  SELECT
    id_user,
    SUM(value) AS given
  FROM
    table
  GROUP BY
    id_user
) given ON given.id_user =  gotten.id_user -- ... this is the same user.

Вы получите нулевые значения там, где их нетотдано или получено голосов.

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