SQLite-Count Distinct与三列分组忽略最后一个分组
我正在制作一个关于美国公司董事的数据库。我根据一个查询创建的一个特定表包含了一家公司宣布破产前5年的所有董事(查询如下): 我不知道为什么,但是这个查询忽略了最后一个组(SQLite-Count Distinct与三列分组忽略最后一个分组,sqlite,Sqlite,我正在制作一个关于美国公司董事的数据库。我根据一个查询创建的一个特定表包含了一家公司宣布破产前5年的所有董事(查询如下): 我不知道为什么,但是这个查询忽略了最后一个组(conn\u co\u id),并且对于任何dir\u id和破产公司id,结果都是相同的,在这两个组中,它也应该根据conn\u co\u id是什么而变化。结果样本(仅当dir\u id或破产公司id发生变化时才会发生变化,如图所示): 结果与我只使用dir\u id和破产公司id进行分组相同,而每个连接公司id的结果应该
conn\u co\u id
),并且对于任何dir\u id
和破产公司id
,结果都是相同的,在这两个组中,它也应该根据conn\u co\u id
是什么而变化。结果样本(仅当dir\u id
或破产公司id
发生变化时才会发生变化,如图所示):
结果与我只使用
dir\u id
和破产公司id
进行分组相同,而每个连接公司id
的结果应该不同。我对groupby
语句做了很多研究,以及它是如何变得棘手的,但我还没能破解这个问题。我非常感谢在这方面的任何帮助 很难重现你的结果。但是您对多个分组的查询似乎没有问题。见下例:
CREATE TABLE test (dir_id INTEGER, bankrupt_co_id INTEGER, conn_co_id INTEGER, linked_dir_id INTEGER);
使用一些虚拟数据:
select * from test;
dir_id bankrupt_co_id conn_co_id linked_dir_id
---------- -------------- ---------- -------------
1 1 1 1
1 1 1 2
1 1 1 4
1 1 1 5
1 1 1 6
1 1 1 7
1 1 2 1
1 1 2 2
1 1 2 3
1 2 2 1
3 3 2 1
3 1 2 1
3 2 2 1
3 2 2 4
1 1 1 3
1 1 4 4
包含您的conn\u co\u id
的查询结果如下:
SELECT dir_id, bankrupt_co_id, conn_co_id, COUNT(DISTINCT linked_dir_id) as conn_dirs FROM test WHERE bankrupt_co_id!=conn_co_id GROUP BY dir_id, bankrupt_co_id, conn_co_id;
dir_id bankrupt_co_id conn_co_id conn_dirs
---------- -------------- ---------- ----------
1 1 2 3
1 1 4 1
3 1 2 1
3 3 2 1
然而,如果没有前两个结果,则将其合并:
SELECT dir_id, bankrupt_co_id, conn_co_id, COUNT(DISTINCT linked_dir_id) as conn_dirs FROM test WHERE bankrupt_co_id!=conn_co_id GROUP BY dir_id, bankrupt_co_id;
dir_id bankrupt_co_id conn_co_id conn_dirs
---------- -------------- ---------- ----------
1 1 4 4
3 1 2 1
3 3 2 1
谢谢你的回复!这就是我所想的,但仍然让我困惑的是,查询在我的表上不能正常工作。我希望我能让这个例子更具可复制性,但是这个数据集是专有的,所以我不能分享更多。你知道为什么查询会这样吗?我假设这与表有关,这就是为什么我将创建它的查询放在帖子中的原因。我真的很感谢你抽出时间来做这件事!我刚刚发现问题在于如何构造第一个查询,所以是的,这个问题不依赖于分组和聚合函数。谢谢你回复我的问题,很高兴你找到了你的错误!干杯
SELECT dir_id, bankrupt_co_id, conn_co_id, COUNT(DISTINCT linked_dir_id) as conn_dirs FROM test WHERE bankrupt_co_id!=conn_co_id GROUP BY dir_id, bankrupt_co_id, conn_co_id;
dir_id bankrupt_co_id conn_co_id conn_dirs
---------- -------------- ---------- ----------
1 1 2 3
1 1 4 1
3 1 2 1
3 3 2 1
SELECT dir_id, bankrupt_co_id, conn_co_id, COUNT(DISTINCT linked_dir_id) as conn_dirs FROM test WHERE bankrupt_co_id!=conn_co_id GROUP BY dir_id, bankrupt_co_id;
dir_id bankrupt_co_id conn_co_id conn_dirs
---------- -------------- ---------- ----------
1 1 4 4
3 1 2 1
3 3 2 1