我的数据库中有一个列(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
答案 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