指定从GROUP BY子句返回的记录

Mat*_*iva 5 mysql sql

编辑澄清

我可能误解了使用,GROUP BY所以我只是重新解释我的问题而不假设如何解决问题:

我有一个term_ids 列表和一个包含对象的表(在其他字段中有object_idPK和term_idFK),我需要提取object_id每个term_id提供的最高的对象.这样做的正确方法是什么?

原始问题

我确定我错过了一些明显的东西,但我无法弄清楚如何指定查询返回哪条记录GROUP BY.默认情况下,GROUP BY返回组中的第一条记录,我可以在不使用子查询的情况下获取最后一条记录吗?

基本查询返回第一条记录:

SELECT *
    FROM wp_term_relationships
    WHERE term_taxonomy_id IN (20, 21, 22)
    GROUP BY term_taxonomy_id
Run Code Online (Sandbox Code Playgroud)

这是有效的,但有一个子查询

SELECT * 
    FROM (
        SELECT * 
        FROM wp_term_relationships
        WHERE term_taxonomy_id IN (20, 21, 22)
        ORDER BY object_id DESC
    ) wtt
    GROUP BY term_taxonomy_id
Run Code Online (Sandbox Code Playgroud)

这是语法错误

SELECT * 
    FROM wp_term_relationships
    WHERE term_taxonomy_id IN (20, 21, 22)
    ORDER BY object_id DESC
    GROUP BY term_taxonomy_id
Run Code Online (Sandbox Code Playgroud)

S.L*_*ott 8

SELECT *... GROUP BY不应该工作.您的第一个示例工作的事实是MySQL的一个棘手的功能.

要使GROUP BY起作用,SELECT子句不能*.它必须是该组的BY列和类似的"聚集体"函数的混合COUNT,SUM等等.

SELECT COUNT(*), some_column FROM... GROUP BY some_column 是预期的形式.

SELECT * 预计不会奏效.

您希望为每个term_id找到最高的object_id.

SELECT MAX(term_id), object_id FROM some_table GROUP BY object_id
Run Code Online (Sandbox Code Playgroud)

那样的东西?