我想要做的是从表中检索所有数据,并按用户在特定类别中玩的游戏数量来排序.有什么办法可以使用某种“COUNT WHERE”sql语句吗?
这是我到目前为止所拥有的.如果他们在“fps”类别中玩过游戏,它只会返回用户,但是我希望它以降序显示所有用户,即使他们没有玩过fps游戏.请原谅我糟糕的桌子
SELECT user_data.user, COUNT(played_games.game_cat) as 'count'
FROM user_data, played_games
WHERE user_data.user_id = played_games.user_id and played_games.game_cat = 'fps'
GROUP BY user_data.user_id
ORDER BY 'count' DESC;
user_data表
user_id | user
1 | jeff
2 | herb
3 | dug
playing_games表
id | user_id | game | game_cat
1 | 2 | kill | fps
2 | 1 | shoot| fps
3 | 2 | COD | fps
4 | 3 | dogs | cas
解决方法:
我就是这样做的.没有子查询,没有COALESCE,没有COUNTIF垃圾.
SELECT `users`.`user`, COUNT(`played_games`.id) AS `c`
FROM `users`
LEFT OUTER JOIN `played_games` ON
`users`.`user_id` = `played_games`.`user_id`
AND `played_games`.`game_cat` = "fps"
GROUP BY `users`.`user_id`
ORDER BY `c` DESC, `user` ASC