SQLite-如何计算行(不包括与特定列具有相同值的行)

时间:2020-05-11 20:09:26

标签: sql sqlite group-by count where-clause

有一个名为:assembly

的表

列:

id: number
partId: number
index: number

对于装配体,我的零件索引为:1,2,3。

但是我可以替换索引2的部分,所以我有2个具有相同索引的部分:

id partId   index
1  234      1
1  456      2
1  789      2
1  765      3

我的装配是零件234、456或789、765。

我需要知道我的装配中有多少个零件(3个零件)

我尝试过:

select count(assembly.index) from assembly where assembly.id in (1) group by assembly_id

我得到:4

好吧,正常。

我认为通过对索引进行分组,我将获得真实计数:

我尝试过:

select count(assembly.index) from assembly where assembly.id in (1) group by assembly.id and assembly.index

我得到2行,计数为2

我希望我得到1行,计数为3。

此外,如果我更改where语句以获取许多像这样的汇编的计数

where assembly.id in (1,2,3)

每个程序集我得到一行错误的计数。

有人知道我如何获得准确的计数吗?

谢谢

1 个答案:

答案 0 :(得分:1)

这是您想要的吗?

select count(distinct a.index) no_indexes
from assembly a
where a.id = 1

这将为您提供一行,计数为3。

如果您希望每个id记录一条,则:

select a.id, count(distinct a.index) no_indexes
from assembly a
group by id 

旁注:index是所有sql方言中的保留字,因此不是列名的理想选择。