mysql - 在 MySQL 中的 ORDER BY 中使用别名列

标签 mysql sql-order-by

我创建一个 SQL 查询来对具有值的记录进行分组并按别名对记录进行排序,如下所示:

SELECT * 
FROM   `timeline`, 
       (SELECT Max(mycountview) 
        FROM   (SELECT Count(id_timeline) AS mycountview
                FROM   `timeline` 
                WHERE  type_timeline = '1' 
                GROUP  BY mediaid)AS mycountview)AS max_mycountview
WHERE  type_timeline = '1' 
GROUP  BY mediaid 
HAVING Count(id_timeline) < max_mycountview
ORDER  BY max_mycountview DESC 
LIMIT  0, 5 

但我收到错误:

Unknown column 'max_mycountview' in 'order clause'


如何解决?

最佳答案

您需要将子查询移至 select 语句而不是 from 子句:

SELECT *, 
        (SELECT Max(mycountview) 
        FROM   (SELECT Count(id_timeline) AS mycountview
                FROM   `timeline` 
                WHERE  type_timeline = '1' 
                GROUP  BY mediaid)AS mycountview) AS max_mycountview
FROM   `timeline`
WHERE  type_timeline = '1' 
GROUP  BY mediaid 
HAVING Count(id_timeline) < max_mycountview
ORDER  BY max_mycountview DESC 
LIMIT  0, 5 

实际上,在重新阅读您的查询后,我认为这不是最有效的方法。您的查询正在表之间执行交叉联接。然而,子查询并不相关——它为每一列返回相同的值。在这种情况下,您只需在子查询中定义列名,就可以在 havingorder by 子句中访问它:

SELECT * 
FROM   `timeline`,
       (SELECT Max(mycountview) max_mycountview   <!--Define Column Alias Here
        FROM   (SELECT Count(id_timeline) mycountview
                FROM   `timeline` 
                WHERE  type_timeline = '1' 
                GROUP  BY mediaid) t) y
WHERE  type_timeline = '1' 
GROUP  BY mediaid 
HAVING Count(id_timeline) < max_mycountview
ORDER  BY max_mycountview DESC 
LIMIT  0, 5 

关于mysql - 在 MySQL 中的 ORDER BY 中使用别名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35966275/

相关文章:

mysql - 使用 Codeigniter 对 utf8_bin 表按字母顺序排序

mysql - 通过 mysql_query 限制和排序

mysql - 在 mysql 中使用大型数据集随机化结果的最快方法

Python MySQLdb 错误 1062 异常不起作用

php - 比较更新php mysql前后的数据

php - 长文不更新

MYSQL 按另一个表列排序但需要一些(和)条件

mysql - 如何为营业时间设计表结构

python - 数据库不会使用 MySQL 和 Python 自动更新

mysql - 使用 ORDER BY 同时仍然保持使用索引