获取 SQLite 中 GROUP_CONCAT 的所有 id

Posted

技术标签:

【中文标题】获取 SQLite 中 GROUP_CONCAT 的所有 id【英文标题】:Get all ids of GROUP_CONCAT in SQLite 【发布时间】:2021-08-08 03:28:54 【问题描述】:

表 B

id   name     tablename
1    abc      table1    
2    xyz      table2
3    abc      table1
4    sdf      table2
5    dfg      table1 

查询:

SELECT B.tablename, GROUP_CONCAT(B.id),GROUP_CONCAT(B.name||'-'||cnt)
FROM (
    SELECT tablename, id, name, COUNT(*) cnt
    FROM B
    GROUP BY tablename,name
) B GROUP BY B.tablename

输出:

| tablename | GROUP_CONCAT(B.id) | GROUP_CONCAT(B.nameB||'-'||cnt) |
| ------ | ------------------ | ------------------------------- |
| table1 | 1,5                | abc-2,dfg-1                     |
| table2 | 2,4                | xyz-1,sdf-1                     |

但是在这里我没有得到完整的 ID,正如您在表 1 的输出中看到的那样。

我想要类似的东西:

| tablename | GROUP_CONCAT(B.id) | GROUP_CONCAT(B.nameB||'-'||cnt) |
| ------ | ------------------ | ------------------------------- |
| table1 | 1,3,5              | abc-2,df-1                      |
| table2 | 2,4                | xyz-1,sdf-1                     |

请帮我解决这个问题。

【问题讨论】:

【参考方案1】:

您也应该在子查询中将GROUP_CONCAT() 用于ids:

SELECT tablename, GROUP_CONCAT(id), GROUP_CONCAT(name||'-'||cnt)
FROM (
    SELECT tablename, GROUP_CONCAT(id) id, name, COUNT(*) cnt
    FROM B
    GROUP BY tablename, name
) 
GROUP BY tablename

请参阅demo。

【讨论】:

非常感谢。我对这个 sqlite 查询完全陌生,因为我一直在处理 ORM。

以上是关于获取 SQLite 中 GROUP_CONCAT 的所有 id的主要内容,如果未能解决你的问题,请参考以下文章

查询中 group_concat 上的 SQLITE 不需要的行为

在 SQLite 的 GROUP_CONCAT 函数中使用 ORDER BY 子句

在 SQLite 中,多个列的排序方式是不是与 group_concat 相同?

group_concat 以及如何在 sqlite 中使用行号

计算 SQLite 中 group_concat 聚合后的唯一行数

group_concat sqlite 和 order by