【问题标题】:mysql - grouping results taking the first in an ordered subquerymysql - 对有序子查询中的第一个结果进行分组
【发布时间】: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)

【问题讨论】:

    标签: mysql group-by sql-order-by mariadb groupwise-maximum


    【解决方案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_ids具有相同的MAX value...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 2012-04-30
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多