我在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的顺序排列
PS。不是我的代码,但我必须对其进行修复才能使应用程序正常工作
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
答案 0 :(得分:1)
我刚刚修复了该错误。在包装order by trades.id
的{{1}}方法中,代码丢失了group_concat
。
shares
答案 1 :(得分:0)
您的查询具有以下结构:
SELECT . . .
FROM . . .
GROUP BY Ticker , Direction , Price , Commission
ORDER BY trades.id
请注意GROUP BY
。在GROUP BY
之后,唯一未汇总的列是列出的列:Ticker
,Direction
,Price
和Commission
。
重要问题:此列表中是否包含trades.id
?
在大多数数据库(和更新的MySQL版本)中,您会得到一个错误。您可以使用聚合函数来解决此问题,例如:
ORDER BY MIN(trades.id)