我在sql中有一个代码,它试图按trades.id字段的数字顺序获取投资组合、某些交易的股价。
问题是下面代码中的两个值都必须按数字顺序返回,以便根据权重计算某种类型的分配。
然而,
投资组合相对于trades.id字段的回报顺序如下
0,1,2,3,4,5,6...
从“股份”中导出的“权重”的返回顺序如下
1,2,3,4,5,6....0
它们的顺序应为0、1、2、3、4、5、6
不是我的代码,但我必须修复它,以使应用程序正常工作
SELECT
'O' AS Hint,
GROUP_CONCAT(trades.id
ORDER BY trades.id) AS ID,
GROUP_CONCAT( (trades.Portfolio)
ORDER BY trades.id) AS Portfolio,
Ticker,
Direction,
FORMAT(SUM(Shares), 0) AS 'Shares',
FORMAT(SUM(Shares), 0) AS 'Original Shares',
Price,
Broker AS Broker1,
Commission,
GROUP_CONCAT(FORMAT
(trades.Shares/
(SELECT SUM(Shares) FROM db.Trades WHERE id IN ('102370' , '102371','102372','102373','102374','102375','102376','102377','102380','102400')),12)) AS Weights,
Issuer
FROM
db.Trades
WHERE
id IN ('102370' , '102371',
'102372',
'102373',
'102374',
'102375',
'102376',
'102377',
'102380',
'102400')
AND is_deleted = '0'
GROUP BY Ticker , Direction , Price , Commission
ORDER BY trades.id
2条答案
按热度按时间xcitsw881#
您的查询具有以下结构:
注意
GROUP BY
. 之后GROUP BY
,唯一未汇总的列是列出的列:Ticker
,Direction
,Price
,和Commission
.重要问题:这个清单包括
trades.id
?在大多数数据库(以及较新版本的mysql)中,都会出现错误。可以使用聚合函数修复此问题,例如:
f5emj3cl2#
我刚修好了窃听器。。代码不见了
order by trades.id
在group_concat
Packageshares
.