当前位置: 首页 > 面试题库 >

MySQL在ORDER BY中获得行位置

丌官利
2023-03-14
问题内容

用下面的MySQL表:

+-----------------------------+
+ id INT UNSIGNED             +
+ name VARCHAR(100)           +
+-----------------------------+

当按排序时,如何选择 单行 及其在表中其他行中的位置name ASC。因此,如果表数据看起来像这样,按名称排序时:

+-----------------------------+
+ id | name                   +
+-----------------------------+
+  5 | Alpha                  +
+  7 | Beta                   +
+  3 | Delta                  +
+ .....                       +
+  1 | Zed                    +
+-----------------------------+

如何选择Beta要获取该行当前位置的行?我正在寻找的结果集将是这样的:

+-----------------------------+
+ id | position | name        +
+-----------------------------+
+  7 |        2 | Beta        +
+-----------------------------+

我可以做一个简单的操作,SELECT * FROM tbl ORDER BY name ASC然后枚举PHP中的行,但是仅为单个行加载可能较大的结果集似乎很浪费。


问题答案:

用这个:

SELECT x.id, 
       x.position,
       x.name
  FROM (SELECT t.id,
               t.name,
               @rownum := @rownum + 1 AS position
          FROM TABLE t
          JOIN (SELECT @rownum := 0) r
      ORDER BY t.name) x
 WHERE x.name = 'Beta'

…以获得唯一的位置值。这个:

SELECT t.id,
       (SELECT COUNT(*)
          FROM TABLE x
         WHERE x.name <= t.name) AS position,
       t.name    
  FROM TABLE t      
 WHERE t.name = 'Beta'

…将赋予领带相同的价值。IE:如果第二个值有两个,则当第一个查询将其中一个赋予2的位置,将另一个赋予3的位置时,它们的位置均为2。



 类似资料:
  • 问题内容: 这可能吗?我想以特定的顺序获取一堆结果,然后通过其ID找出行的位置,例如: 我想按字母顺序获得1的位置,它将返回2 问题答案: SELECT id, name, rank FROM ( SELECT t.id, t.name, @rownum := @rownum + 1 AS rank FROM TABLE t, (SELECT @rownum := 0) r ORDER BY na

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: MySQL中的ROW_NUMBER() 这可能吗?我想按特定的顺序获取一堆结果,然后通过其ID找出行的位置,例如: 我想按字母顺序获得1的位置,它将返回2 问题答案: 从这个答案>> ROW_NUMBER()在MySQL中修改

  • 问题内容: 如何仅使用一个SQL查询来获取MySQL中的最大日期和最小日期? 问题答案:

  • 问题内容: 我在Windows上使用Python,并且希望脚本的一部分将文件从某个目录(我知道其路径)复制到桌面。 我用这个: txt文件的名称为While (具有完整路径)。 我得到错误: 有什么帮助吗? 我希望脚本可以在任何计算机上运行。 问题答案: 您可以用来获取路径。现在,它实际上是在尝试查找而不替换实际路径。 也许像这样:

  • 问题内容: 我有两个表,一个带有列的表: 和带有列的表: 我正在尝试列出车辆的信息,其默认图像以及该车辆具有的图像总数。目前,我正在使用以下语句: 我最初使用的是: 但是根据数据库中是否有默认图像,图像计数将仅为1或0。我已经尝试使用和其他语句,但是仍然无法获得正确的结果。我是否需要使用两个语句,或者是否有其他方法可以使用或处理它? 问题答案:

  • 本文向大家介绍Linux shell 获得字符串所在行数及位置的方法,包括了Linux shell 获得字符串所在行数及位置的方法的使用技巧和注意事项,需要的朋友参考一下 01 获取字符串所在的行数 方式一:用grep -n 方式二:用sed -n '/查询的字符串/=' 文件 02 获取字符串中字符所在的位置 方式一:用awk -F 和 wc -c 组合 方式二:用awk 'BEGIN{prin