sql – 计算组内的每个条件
发布时间:2020-12-12 08:43:56 所属栏目:MsSql教程 来源:网络整理
导读:对于每个唯一的GroupId,我想得到每个IsGreen,IsRound,IsLoud条件和总行数的计数. 样品数据: ----------------------------------------------------- id | ItemId | GroupId | IsGreen | IsRound | IsLoud----+--------+---------+---------+---------+-----
对于每个唯一的GroupId,我想得到每个IsGreen,IsRound,IsLoud条件和总行数的计数.
样品数据: ----------------------------------------------------- id | ItemId | GroupId | IsGreen | IsRound | IsLoud ----+--------+---------+---------+---------+--------- 1 | 1001 | 1 | 0 | 1 | 1 2 | 1002 | 1 | 1 | 1 | 0 3 | 1003 | 2 | 0 | 0 | 0 4 | 1004 | 2 | 1 | 0 | 1 5 | 1005 | 2 | 0 | 0 | 0 6 | 1006 | 3 | 0 | 0 | 0 7 | 1007 | 3 | 0 | 0 | 0 所期望的结果: ---------------------------------------------------------- GroupId | TotalRows | TotalGreen | TotalRound | TotalLoud --------+-----------+------------+------------+----------- 1 | 2 | 1 | 2 | 1 2 | 3 | 1 | 0 | 1 3 | 2 | 0 | 0 | 0 我使用以下代码来创建表,我遇到的问题是,如果任何组没有与匹配组中没有出现在最终表中的条件之一的行.什么是完成我想做的最好的方法? SELECT total.GroupId,total.[Count] AS TotalRows,IsGreen.[Count] AS TotalGreen,IsRound.[Count] AS TotalRound,IsLoud.[Count] AS TotalLoud FROM ( SELECT GroupId,count(*) AS [Count] FROM TestData GROUP BY GroupId ) TotalRows INNER JOIN ( SELECT GroupId,count(*) AS [Count] FROM TestData WHERE IsGreen = 1 GROUP BY GroupId ) IsGreen ON IsGreen.GroupId = TotalRows.GroupId INNER JOIN ( SELECT GroupId,count(*) AS [Count] FROM TestData WHERE IsRound = 1 GROUP BY GroupId ) IsRound ON IsRound.GroupId = TotalRows.GroupId INNER JOIN ( SELECT GroupId,count(*) AS [Count] FROM TestData WHERE IsLoud = 1 GROUP BY GroupId ) IsLoud ON IsLoud.GroupId = TotalRows.GroupId 解决方法您可以使用count来计算每个[GroupId]的行数,并对每个属性进行计数.select [GroupId],count([GroupId]) as [TotalRows],sum([IsGreen]) as [TotalGreen],sum([IsRound]) as [TotalRound],sum([IsLoud]) as [TotalLoud] from [TestData] group by [GroupId] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |