【问题标题】:cartesian product - SUM two columns in the same table笛卡尔积 - 对同一张表中的两列求和
【发布时间】:2013-02-14 02:18:50
【问题描述】:

我正在尝试对同一张表中的两列进行求和,但求和的条件不同。我遇到的问题是试图将结果放入两个不同的列中。如果我使用这个查询,我会得到笛卡尔积。

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"

我知道我很接近,但我肯定错过了一些东西。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以在此使用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
    • 当名称为“连接器原始事件统计信息”时,我还尝试对列 (arc_deviceCustomNumber3) 中的所有数字求和。我不确定上面的示例如何帮助解决这个问题?
    • @user2070571 查看更新,我不是添加arc_deviceCustomNumber3 的列名。无论如何,您可以将name 更改为您的列的原始名称。
    • SELECT SUM(arc_baseEventCount) 'total event count', SUM(CASE WHEN arc_name = 'Connector Raw Event Statistics' THEN arc_deviceCustomString3 ELSE NULL END) 'Total Connector Count' FROM Events
    • 好的,我试过了,如果我使用 ELSE NULL,我不会返回任何内容,如果我使用 ELSE 0 会返回一个零。
    【解决方案2】:

    您可以使用子查询

    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 必须更改为每行中相同的字段?
    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 2012-03-24
    • 2019-08-26
    • 2018-11-21
    • 2015-12-05
    相关资源
    最近更新 更多