使用ROW_NUMBER()和where子句获取未过滤表中的行号

深空

考虑表t

x  y
1  2
3  4

还有一些天真的查询

SELECT
    ROW_NUMBER() OVER ( ORDER BY x ) row_num,
    x,
    y
FROM
    t
WHERE
    x = 3;

哪个(可以理解)输出

row_num x  y
1       3  4

但是我要

row_num x  y
2       3  4

row_num应在未过滤的表上“计算”,因此在应用该WHERE子句之前

我试过了

SELECT
    ROW_NUMBER() OVER ( ORDER BY t.x ) row_num,
    t1.x,
    t1.y 
FROM
    t, t as t1
WHERE
    t.x = t1.x AND t1.x = 3;

但我得到完全相同的输出。

ROW_NUMBER始终执行最后,还是有办法强制它首先执行,然后应用该WHERE子句?

完善

窗口函数是分析性的即席计算类型,在检索到的数据的当前范围内运行。与大多数编程语言的词法顺序不同,SQL以逻辑顺序运行,而不是以声明命令的顺序运行。因此,FROMJOINWHERE条款通常是第一个在SQL查询运行步骤。因此,一旦检索到数据,便会在该数据范围内计算窗口函数。

实际上,SQLite的window函数文档暗示了这一点(添加了重点):

窗口函数是一种SQL函数,其中输入值是从SELECT语句结果集中一个或多个行的“窗口”中获取的

可以使用CTE或子查询解决您的需求,而不是使用自动联接解决方案(该解决方案使用过时的隐式和非显式join):

WITH sub AS (
  SELECT 
      ROW_NUMBER() OVER ( ORDER BY x ) AS row_num
      , x
      , y
  FROM
      t
)

SELECT
     sub.row_num
     , sub.x
     , sub.y
FROM 
    sub
WHERE 
    sub.x = 3;
SELECT sub.row_num
       , sub.x
       , sub.y
FROM (
  SELECT
      ROW_NUMBER() OVER ( ORDER BY x ) AS row_num
      , x
      , y
  FROM
      t
  ) sub
WHERE 
    sub.x = 3;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在UPDATE子句中使用ROW_NUMBER()?

来自分类Dev

Row_Number在行号之间

来自分类Dev

在where子句中使用ROW_NUMBER()OVER(PARTITION BY ...)选择stmt

来自分类Dev

使用SQL使用Row_Number()使用行号更新表

来自分类Dev

如何在ROW_NUMBER()函数和联合中获取过滤器记录?

来自分类Dev

如果未识别列名,如何使用ROW_NUMBER()?

来自分类Dev

使用where子句从大表中过滤数据返回“ response too large ...”错误

来自分类Dev

根据row_number过滤RDD

来自分类Dev

在sqlalchemy中按row_number过滤

来自分类Dev

使用ROW_NUMBER和PARTITION BY获取第一行和最后一行

来自分类Dev

如何使用Scala基于Spark中的条件获取row_number()

来自分类Dev

如何使用row_number()将行号分配给Postgresql中的重复值

来自分类Dev

从表中获取WHERE子句的条件

来自分类Dev

在带条件的删除查询中获取row_number

来自分类Dev

在where子句中使用ROW_NUMBER()OVER(PARTITION BY ...)选择stmt

来自分类Dev

PHP MYSQL使用order by子句从表中查找行号/行号

来自分类Dev

如果未识别列名,如何使用ROW_NUMBER()?

来自分类Dev

连接两个表并使用where子句过滤它们

来自分类Dev

如何在SQL中修改Row_Number语法,以便根据条件分配行号?

来自分类Dev

在sqlalchemy中按row_number过滤

来自分类Dev

使用ROW_NUMBER和PARTITION BY获取第一行和最后一行

来自分类Dev

如何使用Join和where子句从多个表中获取数据

来自分类Dev

使用 Row_Number 将对该表的选择结果插入表中

来自分类Dev

SQL Server:WHERE 子句中的 ROW_NUMBER() 返回“无效的列名”

来自分类Dev

如何使用内连接查询和 where like 子句从表 Produto_precos 中获取另外两个值

来自分类Dev

Row_number 和 union

来自分类Dev

Row_Number 和分区

来自分类Dev

在 SQL Server 的 WHERE 子句中使用 ROW_NUMBER()

来自分类Dev

如何使用 ROW_NUMBER() 向 MySQL 显示添加行号

Related 相关文章

  1. 1

    如何在UPDATE子句中使用ROW_NUMBER()?

  2. 2

    Row_Number在行号之间

  3. 3

    在where子句中使用ROW_NUMBER()OVER(PARTITION BY ...)选择stmt

  4. 4

    使用SQL使用Row_Number()使用行号更新表

  5. 5

    如何在ROW_NUMBER()函数和联合中获取过滤器记录?

  6. 6

    如果未识别列名,如何使用ROW_NUMBER()?

  7. 7

    使用where子句从大表中过滤数据返回“ response too large ...”错误

  8. 8

    根据row_number过滤RDD

  9. 9

    在sqlalchemy中按row_number过滤

  10. 10

    使用ROW_NUMBER和PARTITION BY获取第一行和最后一行

  11. 11

    如何使用Scala基于Spark中的条件获取row_number()

  12. 12

    如何使用row_number()将行号分配给Postgresql中的重复值

  13. 13

    从表中获取WHERE子句的条件

  14. 14

    在带条件的删除查询中获取row_number

  15. 15

    在where子句中使用ROW_NUMBER()OVER(PARTITION BY ...)选择stmt

  16. 16

    PHP MYSQL使用order by子句从表中查找行号/行号

  17. 17

    如果未识别列名,如何使用ROW_NUMBER()?

  18. 18

    连接两个表并使用where子句过滤它们

  19. 19

    如何在SQL中修改Row_Number语法,以便根据条件分配行号?

  20. 20

    在sqlalchemy中按row_number过滤

  21. 21

    使用ROW_NUMBER和PARTITION BY获取第一行和最后一行

  22. 22

    如何使用Join和where子句从多个表中获取数据

  23. 23

    使用 Row_Number 将对该表的选择结果插入表中

  24. 24

    SQL Server:WHERE 子句中的 ROW_NUMBER() 返回“无效的列名”

  25. 25

    如何使用内连接查询和 where like 子句从表 Produto_precos 中获取另外两个值

  26. 26

    Row_number 和 union

  27. 27

    Row_Number 和分区

  28. 28

    在 SQL Server 的 WHERE 子句中使用 ROW_NUMBER()

  29. 29

    如何使用 ROW_NUMBER() 向 MySQL 显示添加行号

热门标签

归档