【问题标题】: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 的新手,很高兴知道这是否可行。

【问题讨论】:

  • 您对此样本数据的预期输出是什么?

标签: function sqlite group-by group-concat


【解决方案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/…
猜你喜欢
  • 2021-11-09
  • 2011-11-11
  • 1970-01-01
  • 2011-03-22
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多