Как посчитать значения в двух разных строках одной таблицы? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть таблица, подобная приведенной ниже:

emp    PR   PF
---    ---  ---
1       10   20
2       30   20
3       10   20
4        5   6

Я пытаюсь посчитать значения так, что если PF или PR или оба совпадают с emp 1, то счетчик должен увеличиваться.

Например, emp 2 имеет PF такой же, как emp 1, поэтому счет должен быть 1 здесь для emp 2.

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

emp   countVal
---   --------
2        1
3        2

Я написал следующий запрос, используя self join, но он не дает требуемого результата.

SELECT  e.emp,sum(CASE When e1.PR=e2.PR Then 1 
                       When e1.PF=e2.PF Then 1
                       Else 0 End ) as countVal
FROM
    employee e1
    INNER JOIN employee e2
        ON e1.emp=e2.emp and e1.emp!=1
        group by e1.emp

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

Ответы [ 2 ]

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

Хорошо, вывод не будет таким, потому что вам нужно создать комбинацию между всеми emp.Невозможно угадать, какие вам нужны:

select *, 
CAST((t1.PR = t2.PR) as int) + cast(t1.PF = t2.PF) as int) as countValue from empTable t1 
cross join empTable t2 

Удачи!

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

Я думаю, что вы хотите:

SELECT e.emp,
      ( (e.PR = e1.PR)::int + (e.PF = e1.PF)::int ) as countVal
FROM employee e JOIN
     employee e1
     ON e1.emp = 1;

Примечания:

  • Агрегирование не требуется.Кажется, что в строке только один сотрудник, и это то, что вам нужно в наборе результатов.
  • При этом используется преобразование типа Postgres из логического значения в целое с использованием ::.
...