假设我有一个如下所示的 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,5和2,3,6。
如果我跑
SELECT id FROM my_table
GROUP BY
field1, field2
HAVING count(*) > 1;
Run Code Online (Sandbox Code Playgroud)
只返回每个组的最后一个,即5和6。我可以返回每个组的所有ID 吗?
如果没有聚合函数,您可以获得任何值。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)
输出:
?????????????????????????????
? 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)
| 归档时间: |
|
| 查看次数: |
4185 次 |
| 最近记录: |