Java Android SQLite按频率对条目进行排序,无需分组

Java Android SQLite按频率对条目进行排序,无需分组,java,android,sqlite,Java,Android,Sqlite,我试图按行值频率降序对数据库记录进行排序,但不对条目进行分组。对不起,我是数据库的初学者 以下是完整的代码: SELECT * FROM table_name WHERE date_time >= 10 and date_time <= 100 GROUP BY activity_type ORDER BY COUNT(activity_type) DESC 这是按活动类型频率按降序排序的期望结果,无需分组: name (irrelevant)

我试图按行值频率降序对数据库记录进行排序,但不对条目进行分组。对不起,我是数据库的初学者

以下是完整的代码:

SELECT   * 
FROM     table_name 
WHERE    date_time >= 10 
and      date_time <= 100 
GROUP BY activity_type 
ORDER BY COUNT(activity_type) DESC
这是按活动类型频率按降序排序的期望结果,无需分组:

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

如果您的数据库支持,您可以使用带有OVER子句的窗口功能,例如

挑选* 从表\u名称 按计数排序*按活动分区\u类型描述 已确认从事以下工作:

MS SQL Server 2008 R2 PostgreSQL 9.3
如果聚合不能影响实际查询,则必须将其移动到子查询中:

挑选* 从表\u名称 其中日期和时间介于10和100之间 按选择计数订购* 从表_中,名称为T2 其中T2.activity\u type=表\u name.activity\u type 日期和时间介于10和100之间;
不幸的是,SQLite不支持GROUPBY in子查询。因此,您可以选择一个外部联接,它自己创建一个表的叉积,然后使用group by进行剔除,或者选择一个临时表,其中包含活动类型计数

显然,这不是一个理想的解决方案。您可能希望为每个调用在名称activity\u count\u表中添加一些唯一标识符,以便多个查询不会相互干扰


这仍然比创建一个需要n^2行内存的外部联接,然后使用group对其进行剔除要好,因为group by在应用于自联接时只会给您一个对角线。

您能提供一些示例数据吗?我编辑了所需的结果,希望问题现在更清楚。原始数据库中的列太多,在这里提供这些列只会把事情搞砸。谢谢,但不幸的是Android SQLite不支持它。@TadeášBraun如果你在问题中提到SQLite,例如标记它,如果SQLite在ORDER BY子句中支持子查询,那么这是一个正确的答案,只是子查询中缺少了date\U time range检查。没有它,计数将是错误的,因此订单将关闭。现在修复。谢谢
name (irrelevant)    activity_type (number)
------------------------------------------------
Rome                       1
London                     1
Madrid                     1
Stockholm                  3
Paris                      3
Moscow                     2
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;