有复杂的订单问题。
下面是结构和数据:
CREATE TABLE `mail_test` (
`id` int(10) UNSIGNED NOT NULL,
`account_id` int(10) UNSIGNED NOT NULL,
`score` float UNSIGNED NOT NULL,
`from` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `mail_test` (`id`, `account_id`, `score`, `from`) VALUES
(1, 1, 0, 'a@a.com'),
(2, 2, 0, 'b@b.com'),
(3, 3, 3, 'c@c.com'),
(4, 5, 4, 'm@m.com'),
(5, 3, 1, 'c@c.com'),
(6, 9, 0.5, 'z@z.com'),
(7, 9, 3, 'z@p.com'),
(8, 8, 2, 'z@p.com');
所需输出:
(4, 5, 4, 'm@m.com'),
(7, 9, 3, 'z@p.com'),
(3, 3, 3, 'c@c.com'),
(5, 3, 1, 'c@c.com'),
(8, 8, 2, 'z@p.com');
(6, 9, 0.5, 'z@z.com'),
(1, 1, 0, 'a@a.com'),
(2, 2, 0, 'b@b.com'),
订单逻辑:首先是具有最大分数的行(父行),然后是具有与父行相同的account_id
和from
的行(子行)。如果没有孩子行-再次与伟大的分数下一行。所以按分数DESC排序。但行由相同的account_id
和from
分组。
mysql版本5.7
3条答案
按热度按时间lzfw57am1#
fiddle
mi7gmzs62#
这可以通过
row_number()
和max()
来实现:这是mysql 5.7的一个工作解决方案:
结果:
Demo here
vlju58qv3#
此版本不支持分区: