我有一个包含三列的表(除了id):
Topic
不能为空,但另外两个可以。没有独特的限制。
所以数据的一个例子是:
我想得到的是user
和ip
的独特组合,并计算按主题分组的结果行:
好的,第一个流行的答案是:
SELECT topic, COUNT(IP)
FROM MyTable
GROUP BY topic;
但是我看到你忽略了用户专栏,为什么?也许我的榜样不好:)
让我们添加一条新记录:
运行上面的查询会给我们相同的结果,但这是错误的:
SELECT DISTINCT topic, user, ip FROM MyTable;
它返回:
所以在这种情况下,总数将是:
答案 0 :(得分:0)
试试这个:
SELECT topic, COUNT(IP)
FROM MyTable
GROUP BY topic
答案 1 :(得分:0)
对于您期望的结果,这是查询:
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(您未指定)而变化。数据类型可能会更改,以及连接运算符/函数。它背后的概念是,DISTINCT
中的COUNT
不能包含2个不同的列,因此您必须将它们连接起来。 #
字符只是为了确保1#11
与11#1
不同。
答案 2 :(得分:0)
SELECT Topic, COUNT(*) [Count]
FROM table
WHERE IP IS NOT NULL
GROUP BY Topic
样品:
-- 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
;WITH TMP AS
(
SELECT DISTINCT topic, [user], ip
FROM @tbl
)
SELECT Topic, COUNT(*)
FROM TMP
GROUP BY Topic
答案 3 :(得分:-1)
不确定你是否可以这样做
select topic, count(COALESCE(topic,'null') + COALESCE(ip,'null')) from table
group by COALESCE(topic,'null') + COALESCE(ip,'null')