programing

MySQL 문이 열 값을 변경하기 전에 행을 정렬하는 것 같습니다. 값이 변경된 후 정렬해야 합니다.

elecom 2023. 10. 20. 13:27
반응형

MySQL 문이 열 값을 변경하기 전에 행을 정렬하는 것 같습니다. 값이 변경된 후 정렬해야 합니다.

이 진짜 쿼리

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

행은 이렇게 주문받습니다.

  • 오펠..
  • 푸조..
  • 르노..
  • 로버..
  • 오펠..

원하는:

  • 오펠..
  • 오펠..
  • 푸조..
  • 르노..
  • 로버..

먼저 정리하고 값을 변경하는 것 같은데 값을 변경한 다음에 정리할 방법이 없을까요?

또는 변경 정렬을 정렬하거나 원하는 값을 가져옵니다.

식을 통해 반환되는 열에 별칭을 지정하지 않았습니다.

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

언급URL : https://stackoverflow.com/questions/61798768/mysql-seems-to-sort-rows-before-if-statement-changes-values-of-columns-i-need-t

반응형