2013-07-08 1 views
0

Я бегу следующий запрос, чтобы получить открытые позиции по портфелю:Использование псевдонимов в подзапроса

SELECT SUM(trades.quantity) as total_quantity, SUM(trades.price) as total_cost, SUM(trades.price)/SUM(trades.quantity) as cost_per_share,   
trades.ticker, tickers.code 
FROM (trades) 
LEFT JOIN tickers 
ON trades.ticker = tickers.id 
GROUP BY tickers.code 
HAVING total_quantity > 0 
ORDER BY tickers.code 

Я хотел бы добавить дополнительный столбец, чтобы показать weightening из позиции, а именно:

total_cost/SUM(total_cost) -- Dividing any given position cost by the total cost of the portfolio 

Поскольку псевдонимы не могут использоваться в вычислениях, я думал, что мне нужно будет использовать подзапрос. Я пробовал несколько вещей, но не мог заставить его работать.

Может ли кто-нибудь пролить свет на это? Является ли суб-запрос способным? Есть ли другой лучший способ сделать это?

+2

Что такое портфель? Как вы рассчитываете «общую стоимость портфеля»? –

+0

@GordonLinoff, портфолио акций – Digger

ответ

0

Не уверен по вашему запросу (вы, кажется, выполняете GROUP BY в поле из таблицы LEFT JOINed, которая может быть нулевой для не найденных совпадающих строк), но, возможно, перекрестное соединение с подзапросом, чтобы получить общее количество все цены

SELECT total_quantity, total_cost, cost_per_share, trades.ticker, tickers.code, total_cost/total_of_prices 
FROM 
(
    SELECT SUM(trades.quantity) as total_quantity, SUM(trades.price) as total_cost, SUM(trades.price)/SUM(trades.quantity) as cost_per_share,   
    trades.ticker, tickers.code 
    FROM trades 
    LEFT JOIN tickers 
    ON trades.ticker = tickers.id 
    GROUP BY tickers.code 
    HAVING total_quantity > 0 
) Sub1 
CROSS JOIN 
(
    SELECT SUM(price) as total_of_prices 
    FROM trades 
    WHERE quantity > 0 
) Sub2 
ORDER BY tickers.code 
+0

Спасибо @Kickstart за то, что указали мне в правильном направлении. Я нашел, что мне нужно было использовать псевдонимы в «родительском» запросе вместо i.e .: trades.ticker или tickers.code Еще раз спасибо, – Digger