mysql排序方式不一致

hyrbngr7  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(320)

我在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
xcitsw88

xcitsw881#

您的查询具有以下结构:

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)
f5emj3cl

f5emj3cl2#

我刚修好了窃听器。。代码不见了 order by trades.idgroup_concat Package shares .

(trades.Shares/ 
       (SELECT SUM(Shares) 
             FROM db.Trades WHERE id IN 
 ('102370''102371','102372','102373','102374','102375','102376','102377','102380','102400')),12) 
 order by trades.id) AS Weights   -- <- here

相关问题