首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个聚集列计算行数

使用多个聚集列计算行数
EN

Stack Overflow用户
提问于 2012-12-11 00:00:37
回答 2查看 3.2K关注 0票数 2

我有一个测试表来演示这个问题:

代码语言:javascript
复制
Id  NetworkId   CountryCode
1       1           de
2       2           de
3       2           de
4       2           de
5       1           us
6       1           us
7       1           us
8       2           us

我需要输出这样的内容:

代码语言:javascript
复制
NetworkId   CountryCode    DistCount
    1           de              1
    2           de              3
    1           us              3
    2           us              1

尝试查询

我找了好几个答案,却找不到我真正需要的东西。下面是第一个相关的问题和我尝试过的查询:Counting the rows of multiple distinct columns

查询:

代码语言:javascript
复制
SELECT NetworkId, CountryCode, COUNT(*) as DistCount
FROM (SELECT DISTINCT NetworkId, CountryCode FROM TestTable) AS FOO
GROUP BY NetworkId, CountryCode

的结果是:

代码语言:javascript
复制
NetworkId   CountryCode    DistCount
    1           de              1
    1           us              1
    2           de              1
    2           us              1

查询:

代码语言:javascript
复制
SELECT COUNT(DISTINCT(STR(NetworkId) + ',' + STR(CountryCode)))
FROM TestTable

的结果是:

代码语言:javascript
复制
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.

我也尝试了这个问题的答案:How can I count distinct multiple fields without repeating the query?

查询:

代码语言:javascript
复制
SELECT 
   NetworkId, 
   CountryCode,
   COUNT(*) OVER(PARTITION BY NetworkId, CountryCode) as DistCount
FROM TestTable
GROUP BY NetworkId, CountryCode

结果:

代码语言:javascript
复制
NetworkId   CountryCode    DistCount
    1           de              1
    1           us              1
    2           de              1
    2           us              1

如你所知,我很难弄清楚该怎么做.我觉得应该比较简单,但我遗漏了一些东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-11 00:05:17

如果Id在TestTable中是唯一的,而不是null (如果它是主键的话),那么这个查询将返回您指定的结果集:

代码语言:javascript
复制
SELECT NetworkId, CountryCode, Count(1) AS DistCount
  FROM TestTable 
 GROUP BY NetworkId, CountryCode
 ORDER BY NetworkId, CountryCode

但是,如果Id列不是唯一的,并且您需要的是每个组中不同的非空Id值的计数,则可以添加distinct关键字:

代码语言:javascript
复制
SELECT NetworkId, CountryCode, Count(DISTINCT Id) AS DistCount
  FROM TestTable 
 GROUP BY NetworkId, CountryCode
 ORDER BY NetworkId, CountryCode

给定示例数据,两个查询都将返回相同的结果。只有在组中有重复的Id值时,才会有差异。

票数 3
EN

Stack Overflow用户

发布于 2012-12-11 00:04:51

除非我搞错了,否则会有用的:

代码语言:javascript
复制
SELECT NetworkId, CountryCode, COUNT(Id) as DistCount
FROM TestTable
GROUP BY NetworkId, CountryCode
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13811451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档