sql row_number() vs select row_number() 获取数据
sql row_number() vs select row_number() to get data
我有以下table
Prod_id Units sold
1, 100
2, 95
3, 84
4, 95
5, 100
我想知道为什么第一个查询给出正确的行数,而第二个 returns 只有 1
select
(ROW_NUMBER() OVER (Partition by amount order by id))
from Products
select *,
(select ROW_NUMBER() OVER (Partition by amount order by id) a )
from Products
结果在这里:http://sqlfiddle.com/#!6/dfd59/11
我想用这个申请100、100 1st和5th
行和 95、95 到此查询中的第 2 行和第 4 行
不使用 with
语句。
有办法请告诉我
写一个没有 from
子句的子查询是对子查询的浪费。它没有做任何令人满意的事情。
直接调用函数即可。
注意:此建议适用于子查询中的 任何 表达式,而不仅仅是 row_number()
.
为什么你的子查询 return 只有“1”?这个原因很难解释。但是,假设子查询写成:
select *,
(select ROW_NUMBER() OVER (Partition by amount order by id) a
from dual)
事实上,这就是可以或将要在多个 SQL 数据库中编写查询的方式。 dual
是一个只有一行的 table。这个小事实强调了正在发生的事情。子查询一次引用 一行 。因此,您得到的 row_number()
仅指按该行进行分区。瞧!你只会得到“1”。
我意识到如果您将子查询视为:
可能会有所帮助
select *,
(select ROW_NUMBER() OVER (Partition by amount order by id) a
from (select products.amount, products.id) p
)
这强调 row_number()
正在应用于子 select 的结果集。根据定义,sub-select 只有一行,这导致“1”被 returned。
我有以下table
Prod_id Units sold
1, 100
2, 95
3, 84
4, 95
5, 100
我想知道为什么第一个查询给出正确的行数,而第二个 returns 只有 1
select
(ROW_NUMBER() OVER (Partition by amount order by id))
from Products
select *,
(select ROW_NUMBER() OVER (Partition by amount order by id) a )
from Products
结果在这里:http://sqlfiddle.com/#!6/dfd59/11
我想用这个申请100、100 1st和5th
行和 95、95 到此查询中的第 2 行和第 4 行
不使用 with
语句。
有办法请告诉我
写一个没有 from
子句的子查询是对子查询的浪费。它没有做任何令人满意的事情。
直接调用函数即可。
注意:此建议适用于子查询中的 任何 表达式,而不仅仅是 row_number()
.
为什么你的子查询 return 只有“1”?这个原因很难解释。但是,假设子查询写成:
select *,
(select ROW_NUMBER() OVER (Partition by amount order by id) a
from dual)
事实上,这就是可以或将要在多个 SQL 数据库中编写查询的方式。 dual
是一个只有一行的 table。这个小事实强调了正在发生的事情。子查询一次引用 一行 。因此,您得到的 row_number()
仅指按该行进行分区。瞧!你只会得到“1”。
我意识到如果您将子查询视为:
可能会有所帮助select *,
(select ROW_NUMBER() OVER (Partition by amount order by id) a
from (select products.amount, products.id) p
)
这强调 row_number()
正在应用于子 select 的结果集。根据定义,sub-select 只有一行,这导致“1”被 returned。