GROUP BY和catx计算2列,给出不同的输出

时间:2012-11-21 12:08:03

标签: sql sas

我必须找到2个变量组合的不同计数。我使用以下2个查询来查找计数:

select count(*) from 
(   select V1, V2 
    from table1
    group by 1,2
) a

select count(distinct catx('-', V1, V2)) 
from table1

逻辑上,上述两个查询都应该给出相同的计数,但我得到的计数不同。注意

  • V1和V2都是整数
  • 两个变量都可以有空值,但我的表中没有空值
  • 没有负值

知道为什么我会得到不同的输出吗?哪个是查找2列或更多列的不同组合计数的最佳方法?

感谢。

4 个答案:

答案 0 :(得分:7)

运行第一个sql代码时,SAS日志给出了答案。使用'group by'需要汇总函数,否则会被忽略。因此,计数将返回总行数,而不是组合的2个变量的不同计数。 只需将count(*)添加到子查询中,您将获得两种方法相同的答案。

select count(*) from 
(   select V1, V2, count(*) 
    from table1
    group by 1,2
) a

答案 1 :(得分:1)

在子查询中使用distinct作为第一个查询.. 当您执行分组但不包括任何聚合函数时,它会丢弃该组。 所以你仍然会有v1和v2的重复组合。

答案 2 :(得分:0)

似乎GROUP BY在SAS中不起作用。除非在查询中有聚合函数,否则不能使用它来删除重复项。我在查询输出的日志中找到了这个 -

  

注意:GROUP BY子句已被丢弃,因为没有SELECT   子句和相关的可选HAVING子句   table-expression引用了一个汇总函数。

这回答了这个问题。

答案 3 :(得分:-1)

您也可以按部分忽略该组,只需在子查询中添加一个不同的部分。您编写的第二个查询也更有效