开发者

How to construct this query? (Ordering by COUNT() and joining with users table)

开发者 https://www.devze.com 2022-12-27 22:48 出处:网络
users table: id-user-other columns scores table: id-user_id-score-other columns They\'re are more than one rows for each user, but there\'s only two scores you can have. (0 or 1, == win or loss)

users table:

id-user-other columns

scores table:

id-user_id-score-other columns

They're are more than one rows for each user, but there's only two scores you can have. (0 or 1, == win or loss). S开发者_运维问答o I want to output all the users ordered by the number of wins, and all the users ordered by the numbers of losses.

I know how to do this by looping through each user, but I was wondering how to do it with one query. Any help is appreciated!


if you want two outputs you need two queries

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

You then do another query for the losses.
Essentially this is the same as Adams response, but his response will give you a list of users ordered by wins, then ordered by losses. To get losses, just change the s.score=1 to s.score = 0


Try something like this:

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
0

精彩评论

暂无评论...
验证码 换一张
取 消