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' 不同的标准?的主要内容,如果未能解决你的问题,请参考以下文章
sqlite是不是可以支持多表联合查询,是不是支持不同数据库的联合查询?
SQLite INSERT 和 DELETE 查询给出错误,但不是 SELECT 查询