【问题标题】:SQL: Add all values from different rowsSQL:添加来自不同行的所有值
【发布时间】:2010-10-06 10:00:00
【问题描述】:

我有两个 SQL 查询要合并为一个。第一个选择我需要在第二个中添加的所有行的 ID:

SELECT t.mp_id FROM t_mp AS t
JOIN t_mp_og USING (mp_id)
WHERE og_id = 2928
AND t.description = 'Energy'

第二个应该将第一个查询返回的行中的值相加。到目前为止,我只能在它们之间添加几个带有 + 的选择。对于添加查询一返回的所有行的动态查询,我想做与“foreach(value from query1){ sum += value }”等效的操作并返回该总和。

SELECT(

(SELECT current_value FROM t_value_time WHERE mp_id = 29280001 AND time_id =
(SELECT time_id FROM t_time WHERE time_stamp = 
(SELECT max(time_stamp) FROM v_value AS v WHERE time_stamp is not null AND mp_id = 29280001)))
+
(SELECT current_value FROM t_value_time WHERE mp_id = 29280015 AND time_id =
(SELECT time_id FROM t_time WHERE time_stamp = 
(SELECT max(time_stamp) FROM v_value AS v WHERE time_stamp is not null AND mp_id = 29280015)))
+
(SELECT current_value FROM t_value_time WHERE mp_id = 29280022 AND time_id =
(SELECT time_id FROM t_time WHERE time_stamp = 
(SELECT max(time_stamp) FROM v_value AS v WHERE time_stamp is not null AND mp_id = 29280022)))

);

我的两个问题:我不知道如何将所有行添加到集合中,只能手动添加“+”方式。我也不知道如何将行中的 ID 放入获取值的 SELECT 中。我试过 AS,但它似乎只适用于表,而不是单个值。

感谢您的帮助, B先生

【问题讨论】:

    标签: sql add


    【解决方案1】:

    这是编辑后的查询

    select t.mp_id,sum(current_value)
    from t_value_time t, t_time tim, v_value v
    where 
    where t.mp_id = v.mp_id
        and v.time_stamp is not null
        and tim.time_stamp = MAX(v.time_stamp)
        and t.time_id=tim.time_id
        and t.mp_id in ( 29280001,29280015,29280022)
    
    group by t.mp_id
    

    使用 SUM() 进行聚合

    【讨论】:

    • 我试过了,但它说“子选择返回超过 1 行”。我猜这在 WHERE 子选择中是不允许的?
    【解决方案2】:

    你试过SELECT Name, SUM(X) FROM Table GROUP BY Name

    【讨论】:

      【解决方案3】:

      选择总和(CURRENT_VALUE)

      来自

      T_VALUE_TIME INNER JOIN T_TIME ON T_VALUE_TIME.TIME_ID=T_TIME.TIME_ID

      在 T_TIME.TIME_STAMP=V_VALUE.TIME_STAMP 上加入 V_VALUE

      WHERE T_VALUE_TIME.MP_ID IN (SELECT t.mp_id FROM t_mp AS t JOIN t_mp_og USING (mp_id)

      哪里 og_id = 2928

      AND t.description = '能量')

      AND T_TIME.TIME_ID=(SELECT MAX(TIME_STAMP) FROM V_VALUE WHERE TIME_STAMP IS NOT NULL)

      按 V_VALUE.MP_ID 分组

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        • 1970-01-01
        • 2016-08-18
        相关资源
        最近更新 更多