SQL 计算数据集中的出现次数,但变量值无法交换

SQL count occurrence in the dataset, but the variable value coud swap

我对我的 SAS on demand sql 程序有疑问。

原始数据集如下所示:

Obs    From    To    
------------------------
1      A         B
2      A         C
3      B         A
4      C         A
5      E         C
6      C         A

问题是我不关心 From 和 To 中出现的内容,我只关心它们都出现了多少次。

我需要这样的输出:

A B occured(no matter what order): 2
A C occured(no matter what order): 3
C E occured(no matter what order): 1

你没有提到你正在使用什么 ,但大多数都有你可以使用的 leastgreatest 功能,所以你总是得到 "smaller"左边的值。例如:

SELECT   LEAST(lista, listb) || '&' || GREATEST(lista, listb), COUNT(*)
FROM     mytable
GROUP BY LEAST(lista, listb), GREATEST(lista, listb)

并非所有数据库都支持 least()greatest()。你可以这样写:

select (case when lista < listb then lista else listb end),
       (case when lista < listb then listb else lista end),
       count(*)
from t
group by (case when lista < listb then lista else listb end),
         (case when lista < listb then listb else lista end);

如果你想把它作为一个字符串:

select ((case when lista < listb then lista else listb end) || '&' ||
        (case when lista < listb then listb else lista end)
       ),
       count(*)
from t
group by (case when lista < listb then lista else listb end),
         (case when lista < listb then listb else lista end);

这个SQL

SELECT CONCAT(A, B) as CAB, COUNT(*) from(SELECT greatest(A,B) as A, least(A,B) as B FROM original_table)s GROUP BY CAB

得到你想要的结果。

因为看起来您正在使用 SAS,这里是您可以使用的语法。

proc sql;
create table want as 
  select min(from,to) as first
       , max(from,to) as second
       , count(*) as count
  from have 
  group by 1,2
;
quit;