Android SQLite 排序条目的频率如果不进行分组

标签: sqlite Java Android
发布时间: 2017/3/19 18:31:33
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图对数据库记录排序行值频率降序排序但没有分组的条目。请原谅我,我是一个总的初学者,在数据库中。

下面是完整的代码︰

SELECT   * 
FROM     table_name 
WHERE    date_time >= 10 
and      date_time <= 100 
GROUP BY activity_type 
ORDER BY COUNT(activity_type) DESC

而以下是相关代码︰

SELECT   * 
FROM     table_name 
GROUP BY activity_type 
ORDER BY COUNT(activity_type) DESC

这是预期的结果 (按降序分组没有 activity_type 的频率排序)︰

name (irrelevant)    activity_type (number)
------------------------------------------------
Rome                       1
London                     1
Madrid                     1
Stockholm                  3
Paris                      3
Moscow                     2

解决方法 1:

不幸的是,SQLite 不支持 group by 在子查询中。 所以你的选择是要么外部联接 (其中创建表的跨产品本身和,然后扑杀与 group by ) 或临时表将包含 activity_type 计数。

CREATE TABLE activity_count_table(activity_type, activity_count);

INSERT INTO activity_count_table 
    SELECT activity_type, COUNT(activity_type) AS activity_count
    FROM table_name
    WHERE date_time BETWEEN 10 AND 100
    GROUP BY activity_type;

SELECT * 
FROM table_name NATURAL JOIN activity_count_table
WHERE date_time BETWEEN 10 AND 100
ORDER BY activity_count_table.activity_count DESC;

DROP TABLE activity_count_table;

显然,这不是一个理想的解决方案。 你可能想要一些独特的标识符添加到名称 activity_count_table 为每个调用 (以便多个查询不会互相干扰)。

它是仍比创建外部联接 (需要 n ^2 行在内存中的),然后剔除它与 group by (这真的只是给你当应用于自联接的对角线)。

赞助商