6

mysql での結果の順序付けで私が抱えている問題について誰かアドバイスしてもらえますか

問題

距離以外の列では注文できません

SELECT * , (
            (
            (
            ACOS( SIN( (
            '56.3168322' * PI( ) /180 ) ) * SIN( (
            `lat` * PI( ) /180 )
            ) + COS( (
            '56.3168322' * PI( ) /180 )
            ) * COS( (
            `lat` * PI( ) /180 )
            ) * COS( (
            (
            '-5.414989099999957' -  `lng`
            ) * PI( ) /180 )
            )
            )
            ) *180 / PI( )
            ) *60 * 1.1515 * 1.609344
            ) AS  `distance` 
            FROM  `incidents` 
            HAVING  `distance` <=3
            ORDER BY  `distance` ASC 
            LIMIT 0 , 30

たとえば、date_incident 行の日付に基づいて列を並べ替えようとすると、

 SELECT * , (
                (
                (
                ACOS( SIN( (
                '56.3168322' * PI( ) /180 ) ) * SIN( (
                `lat` * PI( ) /180 )
                ) + COS( (
                '56.3168322' * PI( ) /180 )
                ) * COS( (
                `lat` * PI( ) /180 )
                ) * COS( (
                (
                '-5.414989099999957' -  `lng`
                ) * PI( ) /180 )
                )
                )
                ) *180 / PI( )
                ) *60 * 1.1515 * 1.609344
                ) AS  `distance` 
                FROM  `incidents` 
                HAVING  `distance` <=3
                ORDER BY  `date_incidents` ASC 
                LIMIT 0 , 30

上記ではソートは行われませんが、それでも結果が返されます。

これについては、どんな助けも素晴らしいでしょう。

4

1 に答える 1

1

標準 SQL では、句が .で囲まれていない限りHAVING、句で見つからない列に名前を付けることは許可されていませんが、 MySQL では句で任意のエイリアスを参照できます。元:GROUP BYaggregate functionHAVING

SELECT name, AVG(age) AS a FROM tables
   GROUP BY name
   HAVING a > 50;
于 2012-10-11T05:24:00.243 に答える