【问题标题】:MySQL Seems to sort rows before if statement changes values of columns, I need to sort it after values been changedMySQL似乎在if语句更改列的值之前对行进行排序,我需要在值更改后对其进行排序
【发布时间】:2020-05-14 13:37:01
【问题描述】:

这个真实的查询

SELECT  IF(`AutomobilioMarke`='Vauxhall', 'Opel', `AutomobilioMarke`),
        `AutomobilioModelis`, `AutomobilioVariklis`, `kurTip`,
        `VarGal`, `GamintojoKodas`, `AutomobilioMetai`, `Kaina`,
        `ID`, `Kur`, `VArkliai`, `VariklioTuris`
    FROM  Detale AS p
    JOIN  AutomobiliuList AS r  ON r.KType = p.KTipas
    WHERE  (`AutomobilioMarke` != '')
      AND  (`KatId` = 4840  OR  `KatId` = 4844)
      AND  (`Quantity` != 0)
    ORDER BY  `AutomobilioMarke` ASC, `AutomobilioModelis` ASC,
              `GamintojoKodas` ASC, `AutomobilioMetai` ASC 

我认为问题出在:

SELECT IF(`Make`='Vauxhall', "Opel", `Make`) FROM Cars ORDER BY `Make` ASC

我得到这样的行排序:

  • 欧宝 ....
  • 标致....
  • 雷诺 ....
  • 漫游者....
  • 欧宝 ....

我想要:

  • 欧宝 ....
  • 欧宝 ....
  • 标致....
  • 雷诺 ....
  • 漫游者....

好像是先排序再改值,有没有办法先改值再排序???

或者排序改变排序,或者只是得到想要的值..

【问题讨论】:

    标签: mysql database mariadb


    【解决方案1】:

    您没有为表达式返回的列设置别名:

    IF(`AutomobilioMarke`='Vauxhall', 'Opel', `AutomobilioMarke`)
    

    因此,如果您认为 ORDER BY 会按此表达式的结果排序,那么您就错了,因为它按表中的列 AutomobilioMarke 排序。
    所以定义一个别名并在ORDER BY 子句中使用它:

    SELECT 
      IF(`AutomobilioMarke`='Vauxhall', 'Opel', `AutomobilioMarke`) AS AutoMarke, 
      `AutomobilioModelis`, 
      `AutomobilioVariklis`, 
      `kurTip`, 
      `VarGal`, 
      `GamintojoKodas`, 
      `AutomobilioMetai`, 
      `Kaina`, 
      `ID`,
      `Kur`, 
      `VArkliai`, 
      `VariklioTuris` 
    FROM Detale AS p JOIN AutomobiliuList AS r 
    ON r.KType = p.KTipas 
    WHERE(`AutomobilioMarke` != '') AND (`KatId` = 4840 OR `KatId` = 4844) AND (`Quantity` != 0)
    ORDER BY AutoMarke ASC, `AutomobilioModelis` ASC, `GamintojoKodas` ASC, `AutomobilioMetai` ASC
    

    【讨论】:

    • 谢谢,你完全正确,我忽略了这一点。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2017-06-12
    • 2010-11-02
    相关资源
    最近更新 更多