在另一列中使用 group by max() 两次
use group by max() twice in another column
我使用mysql查询。
我想知道最高工资的日期和金额。
我想知道我是否可以使用 max() 两次,如下所示。
结果如我所愿
但据我所知,你必须只使用一个 max()。
我错了吗?
http://sqlfiddle.com/#!9/8db0c17/4
create table test ( mid bigint , sal bigint , dt date);
insert into test values( 1, 100, '2020-01-01 00:00:00'),
( 1, 200, '2020-02-01 00:00:00'),
( 2, 100, '2020-03-01 00:00:00'),
( 2, 200, '2020-04-01 00:00:00'),
( 2, 300, '2020-05-01 00:00:00'),
( 3, 500, '2020-10-01 00:00:00');
select mid, max(sal), max(dt) from test group by mid;
mid max(sal) max(dt)
1 200 2020-02-01
2 300 2020-05-01
3 500 2020-10-01
是的,你可以多次使用 max
它应该是不同的列名
另一列应该在group by
您可以在查询中多次使用 max
,但在您的情况下,您不会得到想要的结果。
如果我们这样更改您的数据:
1, 100, 2020-01-01
1, 200, 2020-02-01
2, 100, 2020-02-01
2, 300, 2020-03-01
2, 200, 2020-04-01
2, 300, 2020-05-01
3, 500, 2020-10-01
3, 300, 2020-11-01
您的结果将是:
1, 200, 2020-02-01
2, 300, 2020-05-01
3, 500, 2020-11-01
如您所见,对于第 3 行,我们分别获得了 sal
和 dt
的最大值。
我们可以使用类似这样的东西来获得正确的结果:
select
t.mid, max(t.dt), tmp.sal_max
from test t
join (
select t1.mid, max(t1.sal) as sal_max
from test t1
group by t1.mid) tmp on tmp.mid = t.mid AND tmp.sal_max = t.sal
group by tmp.mid;
结果:
1, 2020-02-01, 200
2, 2020-05-01, 300
3, 2020-10-01, 500
我认为这不是最简单的选择,但它会起作用。
我使用mysql查询。
我想知道最高工资的日期和金额。
我想知道我是否可以使用 max() 两次,如下所示。
结果如我所愿
但据我所知,你必须只使用一个 max()。
我错了吗?
http://sqlfiddle.com/#!9/8db0c17/4
create table test ( mid bigint , sal bigint , dt date);
insert into test values( 1, 100, '2020-01-01 00:00:00'),
( 1, 200, '2020-02-01 00:00:00'),
( 2, 100, '2020-03-01 00:00:00'),
( 2, 200, '2020-04-01 00:00:00'),
( 2, 300, '2020-05-01 00:00:00'),
( 3, 500, '2020-10-01 00:00:00');
select mid, max(sal), max(dt) from test group by mid;
mid max(sal) max(dt)
1 200 2020-02-01
2 300 2020-05-01
3 500 2020-10-01
是的,你可以多次使用 max
它应该是不同的列名
另一列应该在group by
您可以在查询中多次使用 max
,但在您的情况下,您不会得到想要的结果。
如果我们这样更改您的数据:
1, 100, 2020-01-01
1, 200, 2020-02-01
2, 100, 2020-02-01
2, 300, 2020-03-01
2, 200, 2020-04-01
2, 300, 2020-05-01
3, 500, 2020-10-01
3, 300, 2020-11-01
您的结果将是:
1, 200, 2020-02-01
2, 300, 2020-05-01
3, 500, 2020-11-01
如您所见,对于第 3 行,我们分别获得了 sal
和 dt
的最大值。
我们可以使用类似这样的东西来获得正确的结果:
select
t.mid, max(t.dt), tmp.sal_max
from test t
join (
select t1.mid, max(t1.sal) as sal_max
from test t1
group by t1.mid) tmp on tmp.mid = t.mid AND tmp.sal_max = t.sal
group by tmp.mid;
结果:
1, 2020-02-01, 200
2, 2020-05-01, 300
3, 2020-10-01, 500
我认为这不是最简单的选择,但它会起作用。