我试图显示A列中的每个唯一值,并计算每个值出现的频率,忽略B列中值为null的位置
即
Column A Column B
1 56
1 null
1 78
2 null
3 54
我想要一个看起来像
的回报1 2
3 1
答案 0 :(得分:1)
您应该在ColumnA上使用GROUP BY,并选择ColumnB不为NULL的那些记录。以下脚本完成了您的请求,之后我已经包含了一些解释
CREATE TABLE Test(ColumnA INT, ColumnB INT)
INSERT INTO Test(ColumnA, ColumnB) VALUES (1, 56),
(1, null),
(1, 78),
(2, null),
(3, 54)
SELECT ColumnA, COUNT(*)
FROM TEST WHERE ColumnB IS NOT NULL
GROUP BY ColumnA
DROP TABLE Test
感兴趣的部分是SELECT指令。脚本的其余部分仅用于创建和填充简单的表,就像您正在谈论的那样。
请注意SELECT是在ColumnA上进行的,该列也用于GROUP BY子句。这意味着我们想从ColumnA中提取单个值,以便选择其他列,以某种方式聚合它们。
特定聚合,即ColumnB值的出现,由聚合函数COUNT()产生,它告诉我们提取与分组列匹配的那些记录的数量。在我们的例子中,COUNT()计算ColumnA的每个值的记录量。 但是由于你想要排除那些具有NULLB值的记录,我们只是通过WHERE子句将它们从选择中排除:正如你所看到的,我要求那些ColumnB IS NOT NULL的记录。
这样,使用您发布的样本数据,我们将准确获得您的预期:
1 2
3 1