如何在SQL Server中使用where子句计算行数



我在使用SQL Server时遇到了一个问题。我想在查询中显示该特定值发生的次数。这很容易做到,但我想更进一步,我认为解释我试图实现的目标的最好方法是用图像来解释。

我有两张桌子:工厂和胸部

正如你在胸部看到的那样,"hoeveelheid"列告诉胸部有多满,"vol"==1,3/4==0.75。在植物表上有一个专栏"Hoeveelheidperkist",它告诉一个箱子里可以有多少植物。

select DISTINCT kist.Plantnaam, kist.Plantmaat, count(*) AS 'Amount'
from kist
group by kist.plantnaam, kist.Plantmaat

此查询统计所有箱子,但不区分"Vol"箱子和"3/4"箱子的计数。它只做这个。我想要实现的就是这个。但我不知道怎么做。任何帮助都将不胜感激。

如果您使用group-by,则不需要distinct
,并且如果您想要hoeveelheid的分隔计数,则必须将子句添加到group-by中

select DISTINCT kist.Plantnaam, kist.Plantmaat, kist.hoeveelheid, count(*) AS 'Amount'
from kist
group by kist.plantnaam, kist.Plantmaat, hoeveelheid

或者,如果你想要所有的3个计数和samw rowx,你可以使用条件聚合,例如:

select DISTINCT kist.Plantnaam, kist.Plantmaat
, sum(case when kist.hoeveelheid ='Vol' then 1 else  0 end) vol 
, sum(case when kist.hoeveelheid ='3/3' then 1 else  0 end) 3_4 
, count(*) AS 'Amount'
from kist
group by kist.plantnaam, kist.Plantmaat

当您想要过滤计数上的数据时,您必须使用have子句。当您使用聚合函数(sum、count、min、max(并且希望在聚合基础上对其进行筛选时,请使用具有子句

select DISTINCT kist.Plantnaam, kist.Plantmaat, count(*) AS 'Amount'
from kist
group by kist.plantnaam, kist.Plantmaat having count(*) = 1 -- or provide necessary conditions

最新更新