按组声明sqlite获取组中每个组的ID列表

时间:2016-03-02 12:50:22

标签: 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);

看起来像:

1|1|2
2|2|1
3|2|1
4|3|1
5|1|2
6|2|1

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

如果我跑

SELECT id FROM my_table
GROUP BY
    field1, field2
HAVING count(*) > 1;

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

1 个答案:

答案 0 :(得分:2)

如果没有聚合功能,您可以获得任何价值。 SQLite is similiar to MySQL in that matter。在标准SQL中,您必须选择聚合函数,否则您将收到错误。

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

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

SqlFiddleDemo

输出:

╔═════════╦═════════╦═══════╗
║ field1  ║ field2  ║  ids  ║
╠═════════╬═════════╬═══════╣
║      1  ║      2  ║ 1,5   ║
║      2  ║      1  ║ 2,3,6 ║
╚═════════╩═════════╩═══════╝

如果您希望ids仅从选择列列表中删除field1,field2

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

SqlFiddleDemo2