笛卡尔积 - 在同一张表中对两列求和

3
我想对同一张表中的两列进行求和,并根据SUMs上的不同条件分别得到结果。 我遇到的问题是如何将结果分别放入两个不同的列中。 如果我使用这个查询语句,我会得到笛卡尔积。
SELECT SUM(p1.arc_baseEventCount)  AS 'Total Logger Event Count',
       SUM(p2.arc_deviceCustomNumber3) AS 'Total Connector Event Count'
FROM EVENTS AS p1, EVENTS AS p2
WHERE p2.arc_name = "Connector Raw Event Statistics"

当我运行这个查询时,我得到了预期的结果,但是结果分为两行而不是两列。
SELECT SUM(arc_baseEventCount) 'total event count'
FROM Events
UNION ALL
SELECT SUM(arc_deviceCustomNumber3)
FROM EVENTS
WHERE arc_name = "Connector Raw Event Statistics"

我知道我已经接近答案,但肯定还缺少了一些东西。

2个回答

2
您可以在这里使用CASE
SELECT  SUM(arc_baseEventCount) 'total event count', 
        SUM(CASE WHEN arc_name = 'Connector Raw Event Statistics' THEN arc_baseEventCount ELSE NULL END) 'Connector Raw Event Statistics'
FROM    Events

更新1

SELECT  SUM(arc_baseEventCount) 'total event count', 
        SUM(CASE WHEN arc_name = 'Connector Raw Event Statistics' THEN arc_baseEventCount ELSE NULL END) 'total_1',
        SUM(CASE WHEN name = 'Connector Raw Event Statistics' THEN arc_deviceCustomNumber3 ELSE NULL END) 'total_2'
FROM    Events

我想应该将ELSE NULL更改为ELSE 0,因为NULL值会导致特定组的总和为NULL。 - Akash
我也在尝试对列中所有数字求和(arc_deviceCustomNumber3),当名称为“Connector Raw Event Statistics”时。我不确定上面的示例如何帮助解决这个问题? - user2070571
@user2070571,请查看更新,我不知道添加“arc_deviceCustomNumber3”的列名是什么。无论如何,您可以将“name”更改为您的列的原始名称。 - John Woo
SELECT SUM(arc_baseEventCount) '总事件数', SUM(CASE WHEN arc_name = 'Connector Raw Event Statistics' THEN arc_deviceCustomString3 ELSE NULL END) '总连接器数' FROM Events - user2070571
你说得对,我做错了什么,我不小心写成了 arc_deviceCustomString3 而不是 arc_deviceCustomNumber3!非常感谢你的帮助!它现在可以正常工作了! - user2070571
显示剩余3条评论

0
你可以使用子查询。
select distinct sum(p1.arc_baseEventCount)  AS 'Total Logger Event Count'
, (select sum(p2.arc_deviceCustomNumber3) 
from events p2 on p1.something = p2.something
where p2.arc_name = 'Connector Raw Event Statistics') as 'Total Connector Event Count'

from events p1 

好的,所以p1.something = p2.something必须更改为每行都相同的字段? - user2070571

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接