Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为MySQL中的每个组选择第一行?_Mysql - Fatal编程技术网

为MySQL中的每个组选择第一行?

为MySQL中的每个组选择第一行?,mysql,Mysql,我有一张大约有700张唱片的小桌子。我想挑选每组的第一张唱片 查询如下所示 SELECT * FROM release_image ri ORDER BY ri.release_id, ri.position DESC 结果集如下图所示。如您所见,我想从每组中选出第一个,它应该是: release_id image_id position ------------------------------------ 1 1809 3 2 10

我有一张大约有700张唱片的小桌子。我想挑选每组的第一张唱片

查询如下所示

SELECT *
FROM release_image ri
ORDER BY ri.release_id, ri.position DESC
结果集如下图所示。如您所见,我想从每组中选出第一个,它应该是:

release_id  image_id   position
------------------------------------
1           1809      3
2           1010      1
3           2240      2
4           2245      2
...
我该怎么办

试试看

SELECT *
FROM release_image ri
GROUP BY ri.release_id, ri.position DESC;

您可以按分组并拾取最大位置

SELECT ri.*
FROM (
    SELECT ri.release_id, MAX(ri.position) AS position
    FROM release_image ri
    GROUP BY ri.release_id
) ri_max
INNER JOIN release_image ri ON ri_max.release_id = ri.release_id AND ri_max.position = ri.position
可能是这样的:

SELECT release_id, image_id, MAX(position) FROM release_image ri group by release_id

MySQL允许您向
select
子句中添加列,这些列不在
group by
子句中,并且不使用聚合函数。

在此上下文中“first”是如何定义的?这是
位置
列中具有最高值的记录吗?确切地说,具有最高位置的记录是第一条记录
MIN(ri.position)
应该是
MAX(ri.position)
根据OP对以下问题的评论:“……具有最高位置的记录是第一条记录”。@Terminus,谢谢你的提问。你能解释一下为什么Ruslan Zhomir的答案可能是正确的,也可能是不正确的吗?@SurbhiJain在线搜索“mysql ONLY_FULL_GROUP_by”同样,这个问题是一个最大的问题。关于这一点,这里有很多很好的解释。我不认为“MAX(position)”对使用哪一行分组有任何影响。例如,尽管列“MAX(position)”可能具有最大的位置值,但列“image_id”中的值可以用于任何不相关的位置。(由于正在使用GROUP BY,两列的值最终不是来自同一行。)@PeteH32,您确定image_id的值不是对应于MAX(position)的值吗,我运行了上述SQL命令,但我得到了image_id的正确值。我在工作中看到了问题,这是一个相当大的数据集。已经一年多了,所以我不记得细节了,但我的测试证实,上述类型的SQL查询在我的情况下不起作用。结果集有时包含明显来自不同行的列值(即最大列值与image_id列值不在同一行)。不幸的是,MySQL的文档似乎避免了这种常见的用例。其示例非常接近,但略有不同: