如何在SQLite中对列做Groupby并按降序排序(Python实现)
解决SQLite中GROUP BY后排序不生效的问题
你的问题出在GROUP BY和ORDER BY的字段不匹配,加上SQLite对字符串列不支持-字段名的排序写法,导致排序逻辑失效。具体修正方案如下:
方案1:统一使用大写后的字段进行分组、查询和排序
如果你不需要保留原始Agency的大小写,直接用大写后的结果展示和排序,SQL语句可以改成:
query = ''' SELECT UPPER(Agency) AS Agency, COUNT(*) AS NumComplaints FROM data GROUP BY UPPER(Agency) ORDER BY UPPER(Agency) DESC '''
这样分组、查询、排序都基于统一的大写Agency值,排序结果会完全符合预期。
方案2:保留原始Agency显示,按大写后的字段排序
如果需要展示原始的Agency值,但按大写后的逻辑降序排序,修改ORDER BY子句即可:
query = ''' SELECT Agency, COUNT(*) AS NumComplaints FROM data GROUP BY UPPER(Agency) ORDER BY UPPER(Agency) DESC '''
为什么之前的写法无效?
ORDER BY -Agency:SQLite中负号-只适用于数值类型字段,对字符串列无效,这个写法本身就不会触发排序。ORDER BY Agency DESC:你GROUP BY的是UPPER(Agency),但排序用的是原始Agency字段。此时每个分组返回的Agency是该分组内任意一条记录的原始值(可能大小写不一),排序逻辑会基于这些随机返回的原始值,而不是统一的分组键,所以看起来排序没生效。
内容的提问来源于stack exchange,提问作者jangu
相关产品推荐
相关产品推荐

