MySQL无法使用HAVING进行ORDER BY

时间:2012-10-11 04:46:48

标签: mysql sql database

任何人都可以告诉我一个在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

在上面它没有排序但仍然返回结果。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

标准SQL不允许HAVING子句命名GROUP BY子句中未找到的任何列,除非它包含在aggregate function中。但MySQL允许引用HAVING中的任何别名1}}子句。例如:

SELECT name, AVG(age) AS a FROM tables
   GROUP BY name
   HAVING a > 50;