sql - 如何将“索引”列添加到 SQLite 视图?
问题描述
我有一个顺序很重要的视图,我想要一个“索引”列(计数 1、2、3 等),所以我可以选择该列并获取匹配行所在的位置。有没有办法做到这一点?
对于一个真正快速制作的简化示例,我创建了一个类似的视图:
CREATE VIEW my_view AS
SELECT (var1 * 2 - var2 * 3) AS result FROM
(SELECT var1 FROM table1) AS var1,
(SELECT var2 FROM table2) AS var2
ORDER by result DESC
这将返回一个值列表。
喜欢:
CREATE VIEW my_view AS
SELECT (var1 * 2 - var2 * 3) AS result, place FROM
(SELECT var1 FROM table1) AS var1,
(SELECT var2 FROM table2) AS var2
ORDER by result DESC
但我不知道如何定义“地方”。Place 是结果出现的地方。因此,第 47 行中的任何内容都有“47”作为“place”中的值。
我的最终目标是能够获得place
结果值与另一行并列的所有 s 的列表。
解决方案
如果您使用的是现代版本的 sqlite(3.25 或更高版本),row_number()
则可以轻松完成:
CREATE VIEW my_view(result, place) AS
SELECT result, row_number() OVER (ORDER BY result DESC)
FROM (SELECT (table1.var1 * 2 - table2.var2 * 3) AS result
FROM table1
JOIN table2)
ORDER BY result DESC;
(注意使用 ANSI 连接语法,而不是最好避免的那种古老的逗号)。
我确实认为作为一般规则ORDER BY
应该被排除在外;从视图中选择的任何内容都应该负责对数据进行排序以进行演示,而不是它 - 如果您有时想要不同的顺序怎么办?不过,在这种情况下,好消息是排序本质上是免费的,因为无论如何都需要完成它来计算行号。
推荐阅读
- python - 有没有办法使用给定目录中的 numpy.genfromtxt 从 csv 读取数据?
- amazon-web-services - 如何在容器中运行 AWS SAM CLI,因为它需要运行“docker”守护程序?
- c++ - 具有两种(或更多)语言的字典并在代码运行时更改它
- tensorflow - 为什么某些隐藏单元在 GRU 自动编码器中返回零?
- time-complexity - 如何使用 dafny 证明冒泡排序的时间复杂度?
- lstm - 不记得 LSTM 的过去
- node.js - 为在 Azure 上运行的节点应用启用 gzip
- angular - 如何在延迟加载primeng表中进行客户端过滤
- elm - Same row height for all table columns using elm-ui
- python - Every one of my genetic algorithm models mutates in the same way