【问题标题】:SQLite SELECT that returns ids and positions返回 id 和位置的 SQLite SELECT
【发布时间】:2010-09-05 10:35:38
【问题描述】:

使用 SQLite SELECT 语句,我希望能够获得每个结果的位置。

这可能吗?

表格:

fk_id   idx
0       0
0       1
0       2
1       0
1       1
1       3
1       4
2       0

使 [fk_id, idx] 是唯一的。

查询:

SELECT `idx`, <??> from `mytable` WHERE `fk_id`=1

结果:

idx   <??>
0     0
1     1
3     2
4     3

&lt;??&gt; 是我寻找的“订单”/“位置”/“索引”信息。

【问题讨论】:

  • 你想做排名。当您想进行排名时,您必须对平局做出决定。有可能结缘吗?排名和dense_ranking是有区别的,关系就是区别。

标签: sql sqlite


【解决方案1】:

SQLite 没有分析支持 - 最接近的方法是使用子选择:

SELECT mt.idx,
       (SELECT COUNT(*) - 1
          FROM mytable t
         WHERE t.fk_id = mt.fk_id
           AND t.idx <= mt.idx) AS position
  FROM mytable mt
 WHERE mt.fk_id = 1

这里需要注意的是,如果您有重复的 idx 值,它们都会得到相同的位置值。使用此方法获得不同值的唯一方法是添加标准,以便逻辑区分哪个重复项先出现。

【讨论】:

    【解决方案2】:

    您也许可以从隐藏的 ROWID column 获取信息,尽管这可能会是不连续的(如果重要的话)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多