SQLite中如何查询最重复的数据列Android
How to query the most duplicate data column in SQLite Android
我在 Android 中查询 SQLite 数据库时遇到问题。我现在的做法只有ORDER BY
,但是不行,只有排序功能
Cursor cursor = DB.rawQuery("SELECT * FROM Userdetails ORDER BY ID DESC", null);
enter image description here
如何查询ID
列中所有最相似的值?在这种情况下 1ABC
最多出现所以它应该出现二十二次。
1- 您应该按 ID 分组并计算每个项目:
SELECT *, COUNT(*) AS count FROM Userdetails GROUP BY ID
2- 然后给它起个名字,用它的结果来排序:
SELECT * FROM ( SELECT *, COUNT(*) AS count FROM Userdetails GROUP BY ID ) innerQuery
ORDER BY innerQuery.count DESC
在您的代码示例中:
Cursor cursor = DB.rawQuery("SELECT * FROM ( SELECT *, COUNT(*) AS count FROM Userdetails GROUP BY ID ) innerQuery ORDER BY innerQuery.count DESC", null);
请更清楚地说明你的问题和你想做什么。此外,这实际上不是 java 相关的问题。但是,我重写了我 在网上找到的解决方案 ,希望这对您有所帮助
SELECT
*
FROM
yourDatabase
ORDER BY
COUNT(*) OVER (PARTITION BY ID) DESC;
我猜您真的不需要所有列,所以不要使用“*”。此外,这可能会破坏 COUNT
和 DISTINCT
以满足您的需求。
因此,请使用 GROUP BY
而不是 ORDER BY
来获取您需要的信息。您仍然需要 ORDER BY
来按顺序获取列表并添加 LIMIT
以获得最大数量的重复项。
SELECT DISTINCT ID, COUNT(PROFILE) AS COUNT FROM USERDETAILS
GROUP BY ID
ORDER BY COUNT desc
LIMIT 1;
如果您不关心重复次数的关系,则在 WHERE
子句中使用子查询:
SELECT *
FROM Userdetails
WHERE ID = (SELECT ID FROM Userdetails GROUP BY ID ORDER BY COUNT(*) DESC LIMIT 1);
我在 Android 中查询 SQLite 数据库时遇到问题。我现在的做法只有ORDER BY
,但是不行,只有排序功能
Cursor cursor = DB.rawQuery("SELECT * FROM Userdetails ORDER BY ID DESC", null);
enter image description here
如何查询ID
列中所有最相似的值?在这种情况下 1ABC
最多出现所以它应该出现二十二次。
1- 您应该按 ID 分组并计算每个项目:
SELECT *, COUNT(*) AS count FROM Userdetails GROUP BY ID
2- 然后给它起个名字,用它的结果来排序:
SELECT * FROM ( SELECT *, COUNT(*) AS count FROM Userdetails GROUP BY ID ) innerQuery
ORDER BY innerQuery.count DESC
在您的代码示例中:
Cursor cursor = DB.rawQuery("SELECT * FROM ( SELECT *, COUNT(*) AS count FROM Userdetails GROUP BY ID ) innerQuery ORDER BY innerQuery.count DESC", null);
请更清楚地说明你的问题和你想做什么。此外,这实际上不是 java 相关的问题。但是,我重写了我 在网上找到的解决方案 ,希望这对您有所帮助
SELECT
*
FROM
yourDatabase
ORDER BY
COUNT(*) OVER (PARTITION BY ID) DESC;
我猜您真的不需要所有列,所以不要使用“*”。此外,这可能会破坏 COUNT
和 DISTINCT
以满足您的需求。
因此,请使用 GROUP BY
而不是 ORDER BY
来获取您需要的信息。您仍然需要 ORDER BY
来按顺序获取列表并添加 LIMIT
以获得最大数量的重复项。
SELECT DISTINCT ID, COUNT(PROFILE) AS COUNT FROM USERDETAILS
GROUP BY ID
ORDER BY COUNT desc
LIMIT 1;
如果您不关心重复次数的关系,则在 WHERE
子句中使用子查询:
SELECT *
FROM Userdetails
WHERE ID = (SELECT ID FROM Userdetails GROUP BY ID ORDER BY COUNT(*) DESC LIMIT 1);