mysql - 在连接中使用 Max()

标签 mysql max left-join

这是我需要的一种查询。但由于在连接中使用 MAX() 函数,我不断收到错误。如何使用此逻辑编写有效的查询?

编辑:我已更新我的查询,但它没有返回错误。然而,这存在一个逻辑错误。如果 image.sort_index = -1,我不想要最大排序索引。如果 image.sort_index = -1,如何中断 bool 条件检查?以下是更新后的查询

SELECT 
    albums.ID, albums.title, images.ID AS thumb_id, images.image_count as image_count
FROM
    `albums` 
LEFT JOIN
    (
     SELECT
        ID, album_id, sort_index, 
        MAX(sort_index) AS max_sort_index,
        COUNT(ID) as image_count
     FROM
        `images`
     GROUP BY album_id
     ) 

     ON images.album_id = albums.ID 
     AND 
     (images.sort_index = -1 OR images.sort_index = images.max_sort_index)

最佳答案

MAX() 函数是一个聚合函数:它仅在执行所有 JOINWHERE 子句后运行。相反,将其分解为子查询,因此它只运行一次,并在外部查询的其余部分之前运行:

SELECT 
    albums.*, images.ID as album_thumb 
FROM 
    `albums` 
LEFT JOIN `images` ON 
    images.album_id = albums.ID
    AND

    (images.sort_index = -1 OR images.sort_index = (
            SELECT MAX(sort_index) FROM images
        )
    )

缺点是,如果您希望在 images 范围内对外部查询进行任何其他限制(WHERE 子句),则需要在子查询中复制它们以及。这是 SQL 的限制。

关于mysql - 在连接中使用 Max(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23431339/

相关文章:

php - LEFT JOIN 中的 COUNT 返回重复值

r - R中多行取一列的最大值

C++ - 如何在不重载比较运算符的情况下为 std::max 专门化自定义类型?

SQL Server - 条件左连接,两边都有条件

mysql - 确定日期范围是否包含在 MySQL 中的另一个范围中

python - 使用 groupby 获取组中具有最大值的行

php - Laravel 在 leftjoin 处分页

php - 如何修复我的代码以使用 php、mysql 在数组中保存 3 个值来进行调查?

mysql - 停止在 mysql 中重复列值

mysql - 如何将 MySQL 中现有的 RunDeck 项目导入回新的 RunDeck?