MySQL Order By не соответствует - PullRequest
       2

MySQL Order By не соответствует

0 голосов
/ 12 октября 2018

У меня есть код в 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 голосов
/ 12 октября 2018

Я только что исправил ошибку .. Код отсутствовал order by trades.id в методе group_concat, который включает 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
0 голосов
/ 12 октября 2018

Ваш запрос имеет следующую структуру:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...