Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将总计按一列分组?_Sql_Count - Fatal编程技术网

Sql 如何将总计按一列分组?

Sql 如何将总计按一列分组?,sql,count,Sql,Count,我有一个有三列的表(除了id): 话题 使用者 知识产权 Topic不能为空,但其他两个可以为空。没有独特的限制 因此,数据示例如下: 我想得到的是user和ip的不同组合,并按主题对结果行进行分组: 编辑: 好的,第一个流行的答案是: SELECT topic, COUNT(IP) FROM MyTable GROUP BY topic; 但是我看到你忽略了用户栏,为什么?也许我的例子不好:) 让我们添加一个新记录: 运行上述查询将得到相同的结果,但这是错误的: SELECT DI

我有一个有三列的表(除了id):

  • 话题
  • 使用者
  • 知识产权
Topic
不能为空,但其他两个可以为空。没有独特的限制

因此,数据示例如下:

我想得到的是
user
ip
的不同组合,并按主题对结果行进行分组:

编辑: 好的,第一个流行的答案是:

SELECT topic, COUNT(IP)
FROM MyTable
GROUP BY topic;
但是我看到你忽略了用户栏,为什么?也许我的例子不好:)

让我们添加一个新记录:

运行上述查询将得到相同的结果,但这是错误的:

SELECT DISTINCT topic, user, ip FROM MyTable;
它返回:

因此,在这种情况下,总数为:

试试这个:

SELECT topic, COUNT(IP)
FROM MyTable
GROUP BY topic

对于您期望的结果,以下是查询:

select topic, count(ip)
from YourTable
group by topic
请注意,
COUNT
仅计算非空值

更新

在编辑和进一步澄清后,您可以执行以下操作:

select topic, count(*)
from (SELECT DISTINCT topic, user, ip FROM YourTable) sel
group by topic
或者这个:

select topic, count(distinct cast(ip as varchar) + '#' + cast(user as varchar))
from YourTable
group by topic
在第二种方法中,查询可能必须根据您的RDBMS(您没有指定)而有所不同。数据类型可能会更改,连接运算符/函数也可能会更改。它背后的概念是,在
COUNT
中不能有两个不同列的
DISTINCT
,因此必须将它们连接起来。
#
字符只是为了确保
1#11
11#1
不同

样本:

-- preparing the data
DECLARE @tbl TABLE (Topic int, [User] int, IP varchar(20))
INSERT INTO @tbl VALUES
(1,1,null),
(1,1,null),
(1,1,null),
(1,null,'127.0.0.1'),
(1,null,'127.0.0.1'),
(2,1,null),
(2,null,'127.0.0.1'),
(2,null,'127.0.0.1');

-- getting the resuls
SELECT Topic, COUNT(*) [Count]
FROM @tbl
WHERE IP IS NOT NULL
GROUP BY Topic
经编辑的问题:
不确定你是否能做到这一点

select  topic, count(COALESCE(topic,'null') + COALESCE(ip,'null')) from table
group by COALESCE(topic,'null') + COALESCE(ip,'null')

如果排除NULL,则两个主题的计数都不会为2和2,因此这与所需的输出不匹配。我认为安倍是对的,它会是一样的,我会附上样品,你可以复制,粘贴和运行,看看结果会是一样的。事实上,安倍的答案也差不多。他也排除了null,使用了COUNT(ip),我做得更明确一些。结果是一样的,但我认为这种方法过于复杂。不过,这并没有错。
;WITH TMP AS
(
    SELECT DISTINCT topic, [user], ip
    FROM @tbl
) 
SELECT Topic, COUNT(*)
FROM TMP
GROUP BY Topic
select  topic, count(COALESCE(topic,'null') + COALESCE(ip,'null')) from table
group by COALESCE(topic,'null') + COALESCE(ip,'null')