【问题标题】:SQLite Select DISTINCT Values of a Column without OrderingSQLite 选择列的 DISTINCT 值而不进行排序
【发布时间】:2011-01-25 05:02:26
【问题描述】:

我想知道是否可以在 SQLite 列中获取不同值的列表而不对其进行排序。

我尝试了以下查询。但它会自动将唯一文本按升序排列。

从表中选择 DISTINCT 列;

例如

Mathew
Mathew
John
John
John
Numbers
Numbers

结果

John
Mathew
Numbers

但我不希望它被订购。想要在 Mathew、John、Numbers 中使用它

谢谢。

【问题讨论】:

  • 您希望结果的顺序是什么?使用ORDER BY some_other_column
  • 我希望它以出现的顺序显示,而不对列文本进行任何排序。我有重复的值靠近在一起。

标签: sqlite


【解决方案1】:

你想要什么顺序?

如果您想按首次出现的顺序获取值,您可以这样做:

select distinct column
  from table
 order by min(rowid);

【讨论】:

  • 我想要和我的桌子上一样的订单。但我不明白上面的查询。你能解释一下吗。我有重复的值靠近在一起。
  • 我已经使用 SQLiteBrowser 添加了 INTEGER PRIMARY KEY 列,并按新列 MIN() 排序。 :) 谢谢。
  • rowid 是一个隐式 INTEGER PRIMARY KEY。见sqlite.org/lang_createtable.html
  • 哦。所以这很容易奏效。我可以删除该列。它有效:)
  • 这里是count()的警告:你使用select count(distinct column),而不是select distinct count(column)
【解决方案2】:

“没有订购”是什么意思? SQL 表中没有隐含的自然顺序,因此从左到右按列的默认升序顺序与任何其他顺序一样好。如果您更喜欢其他顺序,SELECT DISTINCT 确实接受 ORDER BY 子句。

【讨论】:

  • 实际上在 SQLite 上使用此查询,列的文本按升序排列。
  • 是的,这就是我的观点。基础表(绘制数据的表格)没有“自然”顺序,那么您希望如何对结果集进行排序?升序与其他任何事情一样有意义,因为没有“无序”的顺序需要尊重。
  • 但是当我尝试查询时,它显示使用 SQLite 排序。我已经用结果编辑了我的问题。
【解决方案3】:

嘿,一种简单的方法是在插入记录时添加一个序列号(使其成为主键)并使顺序降序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多