2016-03-02 93 views
1
获取ID的列表中为每个组组

让我们假设我有一个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

没有聚合功能,你可以得到任何值。 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

输出:

​​

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

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

SqlFiddleDemo2

+1

不错!谢谢。 –