在 SQLite 中按计数排序单行数组

Posted

技术标签:

【中文标题】在 SQLite 中按计数排序单行数组【英文标题】:Ordering single line array by count in SQLite 【发布时间】:2020-07-14 05:15:33 【问题描述】:

我一直在尝试理解 SQLite 的 GROUP_CONCAT 函数。我有一个简单的查询,列出了我的表中 section 列中的值,按它们出现的频率排序(最频繁的在前):

SELECT section
FROM analytics_analyticevent
GROUP BY section
ORDER BY COUNT(*) DESC

部分 2 1 10 0 12 8 3 9 7 5 6 4 13 11

我希望将结果显示为逗号分隔的列表,以便我可以将它们剪切并粘贴到 Python 脚本中的数组中。我希望以下内容可以解决问题(c.f. here):

SELECT GROUP_CONCAT(section, ', ')
FROM analytics_analyticevent
GROUP BY section
ORDER BY COUNT(*) DESC

但是,该查询的结果似乎没有按照我预期的方式进行分组,每个部分都出现多次。

我应该编写什么 SQL 来复制第一个查询,但结果以逗号分隔的列表形式显示在一行上?

【问题讨论】:

【参考方案1】:

为此,您需要两个级别的聚合。先按section聚合,统计每组有多少行,排序,然后生成csv字符串:

select group_concat(section, ',')
from (
    select section
    from analytics_analyticevent
    group by section
    order by count(*) desc
) t

【讨论】:

以上是关于在 SQLite 中按计数排序单行数组的主要内容,如果未能解决你的问题,请参考以下文章

SQL:按条件从不同表中按计数排序

在 Objection.js 中按急切结果计数排序记录并实现分页?

计数排序vs基数排序vs桶排序

8计数排序

排序--09---计数排序

计数排序(Counting Sort)