MySQL Order By不一致

时间:2018-10-12 16:51:14

标签: mysql sql

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

2 个答案:

答案 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之后,唯一未汇总的列是列出的列:TickerDirectionPriceCommission

重要问题:此列表中是否包含trades.id

在大多数数据库(和更新的MySQL版本)中,您会得到一个错误。您可以使用聚合函数来解决此问题,例如:

ORDER BY MIN(trades.id)