获取 group by 语句 sqlite 中每个组的 id 列表

Mat*_*ock 4 sql sqlite

假设我有一个如下所示的 sqlite 表:

CREATE TABLE my_table (
    id INTEGER PRIMARY KEY,
    field1 INTEGER,
    field2 INTEGER
);

INSERT INTO my_table (field1, field2) VALUES
    (1, 2),
    (2, 1),
    (2, 1),
    (3, 1),
    (1, 2),
    (2, 1);
Run Code Online (Sandbox Code Playgroud)

看起来像:

1|1|2
2|2|1
3|2|1
4|3|1
5|1|2
6|2|1
Run Code Online (Sandbox Code Playgroud)

对于组大小大于 1 的每组不同值,我想要一组相应的 id。对于上述情况,这将是:1,52,3,6

如果我跑

SELECT id FROM my_table
GROUP BY
    field1, field2
HAVING count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

只返回每个组的最后一个,即56。我可以返回每个组的所有ID 吗?

Luk*_*zda 8

如果没有聚合函数,您可以获得任何值。SQLite 在这方面类似于 MySQL。在标准 SQL 中你必须选择聚合函数,否则你会得到错误。

要获取您可以使用的所有值GROUP_CONCAT

SELECT field1, field2, GROUP_CONCAT(id, ',') AS ids
FROM my_table
GROUP BY field1, field2
HAVING COUNT(*) > 1;
Run Code Online (Sandbox Code Playgroud)

SqlFiddleDemo

输出:

?????????????????????????????
? field1  ? field2  ?  ids  ?
?????????????????????????????
?      1  ?      2  ? 1,5   ?
?      2  ?      1  ? 2,3,6 ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)

如果您只想从选择列列表中ids删除field1,field2

SELECT GROUP_CONCAT(id, ',') AS ids
FROM my_table
GROUP BY field1, field2
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)

SqlFiddleDemo2