【问题标题】:How to get all rows grouped by value in particular column and make on specific group first in Cursor in SQLite?如何在特定列中按值对所有行进行分组,并首先在 SQLite 的游标中对特定组进行分组?
【发布时间】:2017-07-20 21:26:27
【问题描述】:

假设我有一个包含city_id 列的表。我需要得到一个Cursor,它首先指向该列上具有特定值(我指定)的所有行,然后指向再次按city_id 列分组的其余行?

我试过了:

database.query(DATABASE_TABLE_7, columns, null, null, CITY_ID, null, null);

但它只给出了每个 city_id 的最后一行,我无法先获取具有特定 ID 的行。

假设我有一张这样的桌子:

|  _id  |  city_name  |  city_id  |  ...  |
___________________________________________

|   1   |    "A"      |     1     |  ...  |
|   2   |    "B"      |     2     |  ...  |
|   3   |    "A"      |     1     |  ...  |
|   4   |    "B"      |     2     |  ...  |
|   5   |    "B"      |     2     |  ...  |
|   6   |    "C"      |     3     |  ...  |
|   7   |    "B"      |     2     |  ...  |
|   8   |    "C"      |     3     |  ...  |

例如,需要的城市是城市“B”,列表需要是这样的:

1 . "B"
2 . "B"
3 . "B"
4 . "B"
5 . "A"
6 . "A"
7 . "C"
8 . "C" 

或者

1 . "B"
2 . "B"
3 . "B"
4 . "B"
5 . "C"
6 . "C" 
7 . "A"
8 . "A"

其余城市组的显示顺序无关紧要,只要首先列出具有所需 city_id 的行即可

【问题讨论】:

    标签: android sqlite sorting datatable grouping


    【解决方案1】:

    您尝试过 UNION 吗?

    为此使用原始查询(我不确定 helper query() )和其他帮助方法

    试试这个

    select * from locations where city_id=1 
    union 
    select * from locations where city_id!=1 order by city_id
    

    根据需要使用任何其他值(而不是 1)

    【讨论】:

    • 我猜locations 应该替换为实际的表名。我说的对吗?
    • @Marat 是的,这只是一个例子,带有假想的表名和字段
    • 由于某种原因,group by 从每个具有不同 city_id 的组中只返回了 1 行,并且是最后一行。因此,我试图删除它并首先获得所需的行,但因为它们写在表中,所以按顺序排列。此外,union 根本不起作用。替换为union all 并且有效。现在我只需要对其余的行进行分组。该怎么做?
    • @Marat 我不确定你是什么意思,但这就是 group by 所做的。如果 10 行的字段 x=1 并且您使用的是 group by x,那么您只会看到 1 行(来自 10 行)
    • 现在我明白了。但我需要得到所有这些。请告诉我,有哪些可能的方法来做到这一点?
    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2023-01-11
    • 2011-02-18
    相关资源
    最近更新 更多