mysql - 对有序子查询中的第一个结果进行分组
Posted
技术标签:
【中文标题】mysql - 对有序子查询中的第一个结果进行分组【英文标题】:mysql - grouping results taking the first in an ordered subquery 【发布时间】:2018-02-25 20:21:32 【问题描述】:在 mysql 中,我无法根据最大的 value
为每个 foreign_id
拉出一行。奇怪的是,不同版本的mysql都可以工作(如下所列)
id foreign_id value
---------------------
1 1 1000
2 1 2000
3 2 2000
4 2 1000
5 3 2000
我尝试提取 2,3,5 而不是 1,3,5
CREATE TABLE `docs` (
`id` int(11) NOT NULL,
`foreign_id` int(6) DEFAULT NULL,
`value` int(8) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `docs`
ADD PRIMARY KEY (`id`),
ADD KEY `foreign_id_index` (`foreign_id`);
INSERT INTO `docs` (`id`, `foreign_id`, `value`) VALUES
(1, 1, 1000), (2, 1, 2000), (3, 2, 2000), (4, 2, 1000), (5, 3, 2000)
select
docs.id, docs.foreign_id, docs.value
FROM docs
INNER JOIN
(select id, max(value) from docs group by foreign_id) sub
ON sub.id = docs.id
# expected results are ids (2,3,5), not (1,3,5)
【问题讨论】:
【参考方案1】:它比看起来简单
SELECT D.id, D.foreign_id, max_vals.max_val as value
FROM docs D
JOIN
(SELECT foreign_id, MAX(value) as max_val
FROM docs
GROUP BY foreign_id) max_vals
ON D.foreign_id=max_vals.foreign_id and D.value=max_vals.max_val
在这种情况下,您需要JOIN
而不是INNER JOIN
有2个或更多foreign_id
s具有相同的MAX value
...
【讨论】:
以上是关于mysql - 对有序子查询中的第一个结果进行分组的主要内容,如果未能解决你的问题,请参考以下文章