我正在寻找一种解决方案,以获得基于某些参数的行,然后从有序查询中追加该行位置.

因此,我们将查找这样的行:

SELECT * 
FROM `table` 
WHERE `SomeName`='UniqueName' 
ORDER BY `SomeFloat` DESC

这将获得我需要的所有行,但然后我还想连接该查询中此行所在的位置,假设上面有3条记录,其中SomeFloat比我希望返回的4要高,这可能吗?或者我只需要运行第二个查询?

我目前的第二个问题是:

SELECT COUNT(*) 
FROM `table` 
WHERE `SomeFloat` > ( SELECT `SomeFloat` 
                      FROM `table` 
                      WHERE `SomeFloat` = 1635
                     )

因此,我只想联接第二个查询作为初始查询的最后一列,以保存处理(除非这实际上可以忽略不计?) 当然,1635只是一个示例值.

提前谢谢!

编辑:

例如:

第一个命令将搜索该表,并按SomeFloat对结果进行排序

UniqueID   UniqueName   SomeFloat   SomeText
       1          Bob        1.02      Lorem
       2         John       12.41      Ipsum
       3        Sarah        7.19     Lipsum
       4      Michael      123.45     Dorelo

假设我们搜索John,第二个查询将得到1,因为只有1个结果高出1个结果(Michael‘s).如果我们搜索Bob,那么这里的结果将是3,因为其他3个更高.

我想要的最终结果是单个查询返回这个,其中第二个查询将生成RowsAbove.

UniqueID   UniqueName   SomeFloat   SomeText    RowsAbove
       2         John       12.41      Ipsum            1

推荐答案

  • 使用公用表表达式(CTE)类似于内联视图,但出于可读性的考虑,请将其视为主查询之前的"步骤1",以便以所需的方式存放数据,在本例中添加一个ROW_NUMBER.
  • 我们生成一个数据集CTE,它是您的所有数据,按FLOAT降序排序分配行号.我们这样做是为了在通过WHERE子句删除任何记录之前为所有记录分配一个序列号.
  • 然后,我们向CTE查询唯一名称,它将RowNumber-1返回为"Position"或"Rans Over"或需要命名的任何名称.
  • 由于我们以降序将RowNumber分配给每条记录,因此RN-1将始终是浮点数高于所选唯一名称的行数.

未经测试:

WITH CTE AS (SELECT UniqueID, UniqueName,   SomeFloat,   SomeText
                  , row_number() over (PARTITION BY null ORDER BY SomeFloat DESC) as RN  
--or              , row_number() over (ORDER BY SomeFloat DESC) as RN  

             FROM table A)

SELECT UniqueID, UniqueName, SomeFloat, SomeText, RN-1 as Position
FROM CTE
WHERE UniqueName = 'John'

CTE应该会给我们这样的结果:

UniqueID   UniqueName   SomeFloat   SomeText RN
       4      Michael      123.45     Dorelo 1
       2         John       12.41      Ipsum 2
       3        Sarah        7.19     Lipsum 3
       1          Bob        1.02      Lorem 4

当我们用John限制并从RN中减go 1时,我们得到

       2         John       12.41      Ipsum 1

Mysql相关问答推荐

MySQL没有使用S隐式附加到此二级索引的主键

用于将重复行的唯一列值作为单独列获取的SQL查询

获取连续11天未考勤的员工

mysql 代码给我的外键格式不正确

我可以在姓名和姓名日期之间进行搜索吗?

关联同一个表中的两列

完全匹配 IN 子句中的所有值

MySQL 将分组 JSON Select 转换为单个 JSON 对象

MySQL如何在小时和分钟之间 Select 时间

查询以从约会表中获取可用空档

MySQL如何通过外键ID Select 多行?

MYSQL LOAD DATA INFILE 语句适用于工作台,但不适用于 python

MySQL 添加一个 NOT NULL 列

什么是 PyMySQL,它与 MySQLdb 有何不同?它会影响 Django 部署吗?

如何查看打开了多少 MySQL 连接?

org.hibernate.InstantiationException:没有实体的默认构造函数::principal.Cliente

如何在 python 中逐行获取 MySQL ResultSet

MySQL:ALTER IGNORE TABLE 给出违反完整性约束

在 MySQL 中仅 Select 仅包含字母数字字符的行

在 MySQL 的 LIMIT 子句中使用变量