Как построить этот запрос? (Заказ по COUNT () и объединение с таблицей пользователей) - PullRequest
0 голосов
/ 22 апреля 2010

таблица пользователей:

id-user-other columns

таблица результатов:

id-user_id-score-other columns

Это несколько строк для каждого пользователя, но вы можете получить только две оценки. (0 или 1, == выигрыш или проигрыш). Поэтому я хочу вывести всех пользователей, упорядоченных по количеству побед, и всех пользователей, упорядоченных по количеству проигрышей.

Я знаю, как сделать это, просматривая каждого пользователя, но мне было интересно, как это сделать с помощью одного запроса. Любая помощь приветствуется!

Ответы [ 2 ]

4 голосов
/ 22 апреля 2010

если вы хотите два вывода, вам нужно два запроса

SELECT u.user,
COUNT(s.score) as WINS
FROM users u INNER JOIN scores s
     ON u.user_id = s.user_id 
WHERE s.score = 1
GROUP BY u.user_id (and any other columns you need from the user table)
ORDER BY WINS

Затем вы делаете еще один запрос на потери.
По сути это то же самое, что и ответ Адамса, но его ответ даст вам список пользователей, упорядоченных по выигрышам, а затем по потерям. Чтобы получить убытки, просто измените s.score = 1 на s.score = 0

0 голосов
/ 22 апреля 2010

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

SELECT u.user, 
       COALESCE(SUM(s.score), 0) AS WINS,
       SUM(CASE WHEN s.score = 0 THEN 1 ELSE s.score END) AS LOSSES 
  FROM users u
       LEFT JOIN scores s
       ON u.id = s.user_id
GROUP BY u.user
ORDER BY WINS, LOSSES
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...