当前位置: 首页 > 知识库问答 >
问题:

如何在SQL/MySQL中用ORDER BY查找行

呼延才俊
2023-03-14

我有一个表用户

Name     | Poin 
================== 
user1    | 20 
user2    | 30 
user3    | 80 
user4    | 60 
user5    | 10 
user6    | 85 

我有SQL查询

SELECT * 
FROM user 
ORDER BY poin

看起来数据序列是基于点的。

但我需要的是这样的数据(例如,我是user1):

Position 1 : user6 - 85 point 
Position 2 : user3 - 80 point 
Position 3 : user4 - 60 point 

您是位置5:user1-20point


我使用此sql

选择x.name,x.position
从(选择t.user,
             @rownum:=@rownum+1作为位置
        从用户t
        加入(SELECT@rownum:=0)r
         按t.poin DESC排序)x
其中x.user='user1'

共有1个答案

梁丘赞
2023-03-14

这将给出user1的当前等级:

SELECT count(*) AS rank
FROM user
WHERE poin >= (SELECT poin FROM user WHERE name = 'user1')

这个查询的一个小问题是,如果另一个用户有相同的积分,它将被分配相同的等级--它是否正确,这是有疑问的。

如果您想简单地为每个用户添加等级,请使用以下命令:

SELECT
    @rank:=@rank+1 AS rank,
    name,
    poin
FROM user,
    (SELECT @rank:=0) r
ORDER BY poin DESC

您可以使用此查询的小变化来获取单个用户的排名,但避免相同排名不明确的问题:

SELECT *
FROM (
    SELECT
        @rank:=@rank+1 AS rank,
        name,
        poin
    FROM user,
        (SELECT @rank:=0) r
    ORDER BY poin DESC
) x
WHERE name = 'user1'
 类似资料:
  • 问题内容: Go对于此SQL查询中的第二个参数想要什么。我正在尝试在postgres中使用查找。 我真正想要的是: 问题答案: 查询只是使用varargs来替换sql中的参数,因此,在您的示例中,您只需要执行 例如,这个和第二个示例的内容是动态的,那么您将 如果“ IN”部分具有可变的args,则可以执行(播放)

  • 问题内容: 我正在将MySQL Workbench CE用于Windows 5.2.40版。 我想一起执行以下SQL查询。不过我只能先执行执行的SQL查询查询,然后执行查询,之后执行查询。 那么,如何执行,并通过点击查询? 问题答案: 在每个语句后添加分号:

  • 问题内容: 假设我的数据库表中有一个名为“ code”的列,其中包含字符串数据类型。 我想要一个查询,该查询将返回所有带有’code’值的行,该值是给定搜索字符串的子字符串,并且附加条件是该子字符串出现在搜索字符串的末尾。 例如,如果搜索字符串为“ 12345”,则查询应返回“代码”值为 12345 2345 345 45 5的所有行。 问题答案: 只需使用like运算符即可:

  • 现在,这个问题不是关于MySQL查询、结果行或与数据库本身相关的任何内容,而是关于MySQL Workbench程序。 我在程序中打开了数十个表格(包括更改表格和编辑行/列),并且一次只能在UI中看到大约10个标签,因为它们只有一行。使用左右箭头显示更多标签非常缓慢和烦人。 那么,有没有什么方法可以显示多行标签或者以某种方式增加它们的空间?偏好与它无关,除了字体和搜索网络只会返回毫无意义的东西。

  • 我使用MySQL工作台CE为Windows版本5.2.40。 我想一起执行以下SQL查询。但是,我只能通过首先执行查询,然后执行查询,然后执行查询来执行SQL查询。 那么,我如何通过单击来执行< code >创建表 、< code >插入和< code >选择查询呢?

  • 问题内容: 我知道这类问题已经在这里多次发布,例如:Java方式 我在标准树模式的数据量庞大(150K +)( , ,) 问题: 如何获取给定node_id的叶子? 表结构: 数据库: 问题答案: 无法在单个查询中执行此操作。即使有,它也可能效率很低。 我们可以通过存储过程和循环来实现。使用添加的索引,它也应该很快。这使用两个表从输入表(A)中选择节点,并将该节点及其子级插入(B)。然后,它将B交