Количество экземпляров SQL в наборе данных, но значение переменной может быть изменено - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть вопрос о моей SAS по требованию, 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

Ответы [ 4 ]

0 голосов
/ 17 декабря 2018

Так как похоже, что вы используете 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;
0 голосов
/ 16 декабря 2018

Не все базы данных поддерживают 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);
0 голосов
/ 16 декабря 2018

Этот 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

получает желаемые результаты.

0 голосов
/ 16 декабря 2018

Вы не упомянули, что вы используете, но большинство из них имеют функции least и greatest, которые вы можете использовать, так что вы всегда получаете «меньшее» значение слева.Например:

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