相同的值显示为三个值

时间:2017-01-05 16:42:08

标签: sql postgresql

我的数据库中有一个列(Builder),我希望更新这三个值,并将其作为一个值,因为它们完全相同,但我们的数据源会单独处理它。我不知道是什么困境,即使在更新语句之后,数据库仍将它们视为单独的值。我的数据源共显示5行,我的数据库也是如此。我可以做些什么来将它们视为一个而不是三个?

select * from traffic

Builder                      Contacts

Small Brother                   0
Big Brother                     8 
Brother                         10 
Neighbor                        7 
Friend                          5

我更新了表格中的值:

update traffic set Builder = 'Brothers' WHERE Builder in ('Brother',
     'Big Brother','Small Brother') ;

当我这样做时

select distinct Builder from traffic

Builder

Brothers
Neighbor
Friend

它显示为一个值'兄弟',意味着更新语句成功执行。

令人惊讶的是,当我跑步时

 select * from traffic

 Builder              Contacts

 Brothers              0
 Brothers              8
 Brothers              10
 Neighbor              7
 Friend                5

当我应用聚合函数时:

select Builder, sum(Contacts)
from traffic
group by Builder, Contacts

Builder                   Sum
Brothers                  8
Brothers                  10
Neighbor                  7 
Friend                    5

我需要帮助的结果:

select * from traffic

Builder              Contacts

Brothers               18  
Neighbor               7
Friend                 5

2 个答案:

答案 0 :(得分:5)

SELECT * FROM traffic

将为您提供流量表中的每个列和行。 因为你刚刚更新了3行来说“兄弟”,所以你正好回过头来。为了获得您想要的结果,您需要使用

GROUP BY

子句以及聚合子句。

这样的东西
SELECT Builder, SUM(Contacts) 
FROM traffic
GROUP BY Builder

这实际上告诉数据库由构建器首先分组,这将删除重复项,然后选择所有联系人的计数。 SELECT语句在数据库中最后运行。

答案 1 :(得分:1)

如果您不想更新数据,可以试试:

SELECT 
    CASE WHEN Builder LIKE '%Brother%' THEN 
        'Brother'
    ELSE 
        Builder
    END
    ,SUM(Contacts)
FROM traffic
GROUP BY CASE WHEN Builder LIKE '%Brother%' THEN 
        'Brother'
    ELSE 
        Builder
    END