使用聚合函数但不想按特定列分组

Posted

技术标签:

【中文标题】使用聚合函数但不想按特定列分组【英文标题】:Using aggregate function but don't want to group by the specific column 【发布时间】:2014-05-17 20:58:48 【问题描述】:

当我这样做时:

select firstpartno,count(firstpartno) 
from dbo.vw_Split4 
group by firstpartno

效果很好。

我想要两个新列 nMaleCountnFemaleCount。这些将分别是 M 和 F 的计数(firstpartno)。但是计数迫使我按性别分组,这是我不想要的。我想做所有这些并有我的四列,但仅按 firstpartno 分组。请帮忙解决这个问题!

vw_Split4如下:

firstpartno     Sex
     1           M
     2           F
     2           F
     3           M
     5           M
     2           M

我希望之后是这样的:

firstpartno     Sex     nMaleCount     nFemaleCount
     1           M
     2           F
     2           F
     3           M
     5           M
     2           M

非常感谢!

【问题讨论】:

【参考方案1】:

如果我正确理解你的问题,你宁愿这样做:

SELECT firstpartno, Sex, COUNT(firstpartno)
GROUP BY firstpartno, Sex

除非出于某种原因您想将 M 和 F 的计数分成 2 列...

【讨论】:

【参考方案2】:

您可以对 CASE 语句求和:

select firstpartno
      ,count(firstpartno)
      ,sum(case when sex = 'm' then 1 else 0 end) nMaleCount
  from dbo.vw_Split4 
 group by firstpartno

【讨论】:

非常感谢卡尔。这很好用!正是我需要的。

以上是关于使用聚合函数但不想按特定列分组的主要内容,如果未能解决你的问题,请参考以下文章

按 Sql Server 中的一列分组并按未包含在聚合函数或 GROUP BY 子句中的另一列排序

pandas使用groupby函数agg函数获取每个分组聚合对应的均值(mean)实战:计算分组聚合单数据列的均值计算分组聚合多数据列的均值

pandas使用groupby函数agg函数获取每个分组聚合对应的标准差(std)实战:计算分组聚合单数据列的标准差(std)计算分组聚合多数据列的标准差(std)

具有分组依据的 PostgreSQL 聚合函数

SUM 值按列分组,但不能“聚合”?

聚合后用蜂巢表读取和写入