Получить другой столбец из sum-sub-select - PullRequest
2 голосов
/ 31 мая 2011

Я выбираю что-то из подвыбора, что, в свою очередь, дает мне список сумм. Теперь я хочу выбрать столбец 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

Где / как я могу дополнительно выбрать base_unit из таблицы t_mp для каждой из этих сумм, чтобы я мог передать его в функцию f_unit_converter?

Большое спасибо, МРБ

Ответы [ 3 ]

1 голос
/ 31 мая 2011
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
1 голос
/ 31 мая 2011

Предполагая, что все выбранные строки имеют одинаковый base_unit, вы сможете добавить его как к SELECT , так и к GROUP BY вашего подзапроса.

0 голосов
/ 31 мая 2011

Используйте 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
...