sql - 相同的值显示为三个值

标签 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

它显示为一个值为 'Brothers' 表示更新语句执行成功。

令人惊讶的是,当我运行时

 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

最佳答案

SELECT * FROM traffic

将为您提供流量表中的每一列和每一行。 因为您刚刚将其中 3 行更新为“Brother”,所以您得到的正是这个结果。为了得到你想要的结果,你需要使用

GROUP BY

子句和聚合子句。

有点像

SELECT Builder, SUM(Contacts) 
FROM traffic
GROUP BY Builder

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

关于sql - 相同的值显示为三个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41490247/

相关文章:

database - 长期大量交易不好吗

postgresql - 在 Windows 上的 postgresql 中转义分号

sql - 在 golang 中处理插入到具有不同和大量列的数据库

sql - 带有条件 where 的 Ecto 片段子查询

mysql - 如何在 MySQL 中返回数据透视表输出?

mysql - Group_concat 具有复杂查询或子查询输出?

python - 如何使用 Python 测试 timescaledb 数据库

mysql - 无法添加外键约束

sql - 时间序列postgresql查询的交叉连接

postgresql - Hive Metastore 配置 PostgreSQL