如何计算同一张表的两个不同行中的值?

时间:2018-12-08 18:54:32

标签: sql postgresql-9.4

我有一个如下表:

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

我正在尝试对值进行计数,以使如果PFPR或两者与emp 1相同,则计数应增加。

例如,emp 2的PF与emp 1相同,因此,对于emp 2,count应该为1。

对于给定的表格示例,我正在尝试获得如下输出:

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

我已经使用自我联接编写了以下查询,但未提供所需的输出。

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 :(得分:0)

我想你想要

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的类型从布尔值转换为整数。

答案 1 :(得分:0)

好吧,输出结果不会像那样,因为您需要在所有经验值之间进行组合。无法猜测您需要哪些:

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

祝你好运!