【问题标题】:MYSQL Order By W/CountMYSQL 按 W/Count 排序
【发布时间】:2013-01-29 18:14:24
【问题描述】:

我的桌子上有用户名和用户积分,我正在制作排行榜列表。我想根据积分获得前十名的球员。我已将此查询表述为:

SELECT
    users.username,
    users.points
FROM users
ORDER BY users.points DESC
LIMIT 10

但是,我还想根据排名第一的玩家来获取玩家的位置,而不为它创建新列。是否有一个 MYSQL 查询来通过点获取 ORDER BY DESC 以及从 ORDER 中获取 COUNT 以在列表中查找用户? (WHERE username=)。

编辑澄清:我想通过上述语句从 desc 中计算用户数。 IE。 1 - 用户 1 - 1000 分,2 - 用户 2 - 750 分……等等…… N - currentPlayer - currentPoints。我不介意使用JOIN 声明,但我不希望有一个按排名排序的新玩家列。

【问题讨论】:

  • 您能否再解释一下:“是否有一个 MYSQL 查询来按点获取 ORDER BY DESC 以及从该 ORDER 中获取 COUNT ”。 COUNT 个什么?
  • 不想创建新列是什么意思?您不想在表格中永久保留一列,或者您甚至不想以任何方式创建JOIN
  • 您在寻找百分位平铺排名吗?所以我们你的表结构和期望的结果。
  • 为澄清而编辑。

标签: mysql count sql-order-by


【解决方案1】:

试试这个:

SELECT * FROM (
    select @rownum:=@rownum+1 `rank`, u.username, u.points 
    from users u, (SELECT @rownum:=0) r
    order by points desc) AS X
WHERE username ="Bob";

样本数据:

CREATE TABLE users(
  id int auto_increment primary key,
  username varchar (30),
  points INT
  );

INSERT INTO users(username,points)
VALUES ('Bob', 1000), ('Jack',750), ('Joe', 500)

SQL FIDDLE DEMO

【讨论】:

  • @brutalhonesty 很高兴我能提供帮助。
  • 无论如何我可以为城市或州等列添加另一个分隔符?那么基于他们的城市或州的当前位置?谢谢!
  • @brutalhonesty 是的,你可以。使用与上述相同的格式。如果城市或州信息在用户表中,则无需连接即可执行此操作。将所选城市或州添加到嵌套选择查询中。例如,( select @rownum:=@rownum+1 rank, u.username, u.points, u.city from users u, (SELECT @rownum:=0) r WHERE u.city = "New York" order by points desc) AS X
  • @brutalhonesty 完全正确。 WHERE BINARY 的好技巧,这样您就可以从查询中获得区分大小写的结果,而不是不区分大小写的结果。
【解决方案2】:
SELECT users.username, users.points FROM users WHERE users.points=MAX(users.points) OR users.username='<comparison username>' ORDER BY users.points DESC;

【讨论】:

  • 这句话不走运,排行榜中没有 COUNT 个用户当前位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多