Подсчет дубликатов в двух разных столбцах с одинаковым именем с использованием SQL-запроса - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть следующая таблица:

Team1  Team2  result
---------------------
 a       b      a
 b       c      b
 c       a      a
 b       a      b
 b       c      -
 a       b      a
 b       c      b 

Я хочу подсчитать повторяющиеся комбинации команд, присутствующих в столбцах Team1 и Team2, как показано ниже:

Team1  Team2   count
--------------------
 a       b      3
 b       c      3
 c       a      1

Я пробовал следующий запрос:

SELECT TEAM1,TEAM2, COUNT(*) AS COUNT
FROM TABLE_NAME
GROUP BY TEAM1, TEAM2

Я не получил желаемый вывод.Вместо этого я получил следующее:

Team1  Team2   Count
---------------------
  c      a       1
  b      a       1
  a      b       2
  b      c       3

Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

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

Вы можете использовать группирование по умножению (будучи коммутативной алгебраической операцией) функции ascii, примененной к этим столбцам как

 with table_name(Team1,Team2,result) as
 (
     select 'a','b','a'  from dual union all
     select 'b','c','b'  from dual union all
     select 'c','a','a'  from dual union all
     select 'b','a','b'  from dual union all    
     select 'b','c',null from dual union all
     select 'a','b','a'  from dual union all
     select 'b','c','b'  from dual
 )
  select min(team1) as team1,max(team2) as team2,
         count(*) as count
    from table_name
   group by ascii(team1)*ascii(team2)  
   order by team1;

TEAM1 TEAM2 COUNT
  a     b     3
  b     c     3
  c     a     1

Rextester Demo

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

Вы можете использовать least() и greatest():

SELECT LEAST(TEAM1, TEAM2) as TEAM1, GREATEST(TEAM1, TEAM2) as TEAM2, COUNT(*) AS CNT
FROM  TABLE_NAME
GROUP BY LEAST(TEAM1, TEAM2), GREATEST(TEAM1, TEAM2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...