SQLite - 是不是可以在同一个查询中使用 group_concat 函数但 'GROUP BY' 不同的标准?

Posted

技术标签:

【中文标题】SQLite - 是不是可以在同一个查询中使用 group_concat 函数但 \'GROUP BY\' 不同的标准?【英文标题】:SQLite - Is it possible to use the group_concat function in the same query but 'GROUP BY' different criteria?SQLite - 是否可以在同一个查询中使用 group_concat 函数但 'GROUP BY' 不同的标准? 【发布时间】:2021-08-11 05:57:00 【问题描述】:

我一直在网上搜索,看是否有可能有一个查询包含两个 group_concat 和两个不同的 'GROUP BY' 条件。基本上我想要一个查询,根据一组标准 group_concat 一个列,然后另一列 group_concat 具有一组不同的标准。

例如,如果我有下表:

ID Country Item Product
1 USA B Chair
2 UK B Chair
2 UK B Car
3 NZ A Car
1 NZ A Bicycle
3 USA A Bicycle

如果我想在一列中按“ID”和“国家”对产品列进行分组,并在另一列中按“国家”对产品列进行分组,我该如何在一个查询中执行此操作。这甚至可能吗?

提前致谢,我还是 SQLite 的新手,很高兴知道这是否可行。

【问题讨论】:

您对此样本数据的预期输出是什么? 【参考方案1】:

您可以使用 GROUP_CONCAT() 窗口函数而不是 GROUP_CONCAT() 聚合函数:

SELECT DISTINCT ID, Country,
       GROUP_CONCAT(Product) OVER (
         PARTITION BY Country 
         ORDER BY Product
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
       ) products_by_country,
       GROUP_CONCAT(Product) OVER (
         PARTITION BY ID, Country 
         ORDER BY Product
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
       ) products_by_id_country
FROM tablename

请参阅demo。

【讨论】:

谢谢!这真是太棒了!如果我将它与 group_concat() 聚合函数一起使用,会有什么问题吗?抱歉回复晚了 您还有其他关于 ROWS BETWEEN 工作原理的信息吗?我查看了 SQLITE (sqlite.org/windowfunctions.html) 文档,有点混乱 @user5553440 对于您的第一个问题,这取决于要求。可以混合聚合和窗口函数。对于您的第二个问题,我相信文档中的示例很好,但您也可以查看 SQL Server 的文档:docs.microsoft.com/en-us/sql/t-sql/queries/…

以上是关于SQLite - 是不是可以在同一个查询中使用 group_concat 函数但 'GROUP BY' 不同的标准?的主要内容,如果未能解决你的问题,请参考以下文章

检查查询是不是在 Android 的 sqlite 中成功

sqlite是不是可以支持多表联合查询,是不是支持不同数据库的联合查询?

C++ sqlite语句查询表格是不是存在

SQLite INSERT 和 DELETE 查询给出错误,但不是 SELECT 查询

计算 Unix 纪元时间是不是出现在今天的 SQLite 查询

使用 SQLite 组合两个查询的结果