在子查询中使用别名
Posted
技术标签:
【中文标题】在子查询中使用别名【英文标题】:Using alias in subquery 【发布时间】:2013-07-08 10:51:03 【问题描述】:我正在运行以下查询来获取投资组合的未平仓头寸:
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
我想添加一个额外的列来显示位置的权重,即:
total_cost/SUM(total_cost) -- Dividing any given position cost by the total cost of the portfolio
由于别名不能用于计算,我想我需要使用子查询。我尝试了一些方法,但无法正常工作。
任何人都可以对此有所了解吗?子查询是要走的路吗?还有其他更好的方法吗?
【问题讨论】:
什么是投资组合?你如何计算“投资组合的总成本”? @GordonLinoff,股票投资组合 【参考方案1】:不确定您的查询(您似乎正在对 LEFT JOINed 表中的字段执行 GROUP BY,对于未找到的匹配行可能为 null),但可能交叉连接到子选择以获得所有价格
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
【讨论】:
感谢@Kickstart 为我指明了正确的方向。我发现我需要在“父”查询中使用别名而不是即:trades.ticker 或 tickers.code 再次感谢,以上是关于在子查询中使用别名的主要内容,如果未能解决你的问题,请参考以下文章