【问题标题】:Get another column from sum-sub-select从 sum-sub-select 中获取另一列
【发布时间】:2011-05-31 08:18:48
【问题描述】:

我正在从子选择中选择一些东西,这反过来又给了我一个总和列表。现在我想选择包含测量单位的 base_unit 列。我似乎无法将 base_unit 添加到子选择中,因为它不适用于 GROUP BY 语句。

SELECT to_char(a.pow * f_unit_converter(base_unit, '[W]'), '000.00') 
FROM (
    SELECT sum (time_value) AS pow 
    FROM v_value_quarter_hour
    WHERE 
       mp_id IN (SELECT mp_id FROM t_mp WHERE mp_name = 'AC') AND 
       (now() - time_stamp < '5 day') 
    GROUP BY time_stamp
    ORDER BY time_stamp DESC 
) a 
LIMIT 1

我可以在哪里/如何从 t_mp 表中为每个总和额外选择 base_unit,以便我可以将其传递给 f_unit_converter 函数?

非常感谢, B先生

【问题讨论】:

    标签: sql group-by subquery


    【解决方案1】:
    SELECT to_char(a.pow * f_unit_converter(a.base_unit, '[W]'), '000.00') 
    FROM (
        SELECT sum (time_value) AS pow, t_mp.base_unit
        FROM v_value_quarter_hour
            inner join t_mp on (v_value_quarter_hour.mp_id = t_mp.mp_id)
        WHERE 
           t_mp.mp_name = 'AC' AND 
           (now() - time_stamp < '5 day') 
        GROUP BY time_stamp, base_unit
        ORDER BY time_stamp DESC 
    ) a 
    LIMIT 1
    

    【讨论】:

      【解决方案2】:

      假设您选择的所有行都具有相同的base_unit,您应该能够将其添加到子查询的SELECTGROUP BY

      【讨论】:

        【解决方案3】:

        使用INNER JOIN 而不是IN。像这样的

        SELECT to_char(a.pow * f_unit_converter(base_unit, '[W]'), '000.00')  FROM (
            SELECT sum (time_value), base_unit AS pow 
            FROM v_value_quarter_hour
            INNER JOIN t_mp ON v_value_quarter_hour.mp_id = t_mp.mp_id
            WHERE mp_name = 'AC' AND 
               now() - time_stamp < '5 day'
            GROUP BY time_stamp, base_unit
            ORDER BY time_stamp DESC  ) a  LIMIT 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-14
          • 1970-01-01
          • 1970-01-01
          • 2014-09-06
          • 2015-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多