- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 postgres 9.1 构建分页记分牌。
用户可以根据多个标准对记分板进行排序,他们可以按升序或降序排序。有一个功能可以让用户在记分牌的多个页面中找到“他们的行”,它必须反射(reflect)用户选择的排序标准。
我正在使用 postgres 的 row_number 函数来查找它们在结果集中的偏移量,以返回用户可以找到其行的页面。
我正在阅读的关于 row_number 的所有内容似乎都在暗示坏事 会发生在那些没有在 row_number 窗口内指定顺序的人身上。例如。 row_number() OVER (ORDER BY score_1)
可以,row_number() OVER ()
不好。
我的案例与我读过的示例不同,因为我明确地对我的查询进行了排序,我意识到如果我不这样做,数据库引擎可能不会以任何特定的顺序返回结果.
但我只想在整个查询级别指定排序并获取结果的 row_number,而不必使用 row_number 的窗口复制我的排序规范。
所以这就是我想做的,而且它“似乎有效”。
SELECT
id,
row_number() OVER () AS player_position,
score_1,
score_2,
score_3,
FROM my_table
ORDER BY (score_1 ASC | score_1 DESC | score_2 ASC | score_2 DESC | score_3 ASC | score_3 DESC)
player_position
反射(reflect)了玩家在我排序时所依据的任何标准中的排名。
但是我读过的文档告诉我应该这样做:
SELECT
id,
row_number() OVER (ORDER BY score_1 ASC) AS player_position,
score_1,
score_2,
score_3,
FROM my_table
ORDER BY score_1 ASC
或
SELECT
id,
row_number() OVER (ORDER BY score_2 DESC) AS player_position,
score_1,
score_2,
score_3,
FROM my_table
ORDER BY score_2 DESC
我想避免为 row_number 窗口冗余指定顺序的真正原因是为了让我的查询适合 ActiveRecord ORM。我想要我的基本记分牌查询,并按顺序链接。
例如最终,我希望能够做到这一点:
Players.scoreboard.order('score_1 ASC')
Players.scoreboard.order('score_2 DESC')
etc...
这可能吗?
最佳答案
尝试将主查询移动到带有 ORDER BY 的子查询中,并将 ROW_NUMBER() 应用于最外层的查询。
SELECT y.*,
ROW_NUMBER() OVER () as player_position
FROM
(SELECT
id,
score_1,
score_2,
score_3,
FROM my_table
ORDER BY <whatever>) as y
关于ruby-on-rails - row_number() 带有未指定的窗口 `row_number() OVER ()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597875/
我是一名优秀的程序员,十分优秀!