You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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
'''

为什么之前的写法无效?

  1. ORDER BY -Agency:SQLite中负号-只适用于数值类型字段,对字符串列无效,这个写法本身就不会触发排序。
  2. ORDER BY Agency DESC:你GROUP BY的是UPPER(Agency),但排序用的是原始Agency字段。此时每个分组返回的Agency是该分组内任意一条记录的原始值(可能大小写不一),排序逻辑会基于这些随机返回的原始值,而不是统一的分组键,所以看起来排序没生效。

内容的提问来源于stack exchange,提问作者jangu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:57:08